თავი 6
სტრინგები
6.1
A string is a sequence
სტრინგი სიმბოლოების თანრიგია. სიტყვაში
სიმბოლოზე წვდომა შეგიძლია კვადრატული ფრჩხილების გამოყენებით.
>>> fruit = 'banana'
>>> letter = fruit[1]
მეორე ბრძანება, fruit ცვლადიდან იღებს სიმბოლოს ინდექსურ
პოზიციას 1 და უტოლებს ცვლად letter - ს
ინდექსი ჰქვია გამოსახულებას კვადრატულ ფრჩხილში. ინდექსი უთითებს სახელიდან რომელი სიმბოლო გინდა.
თუმცა შეიძლება სასურველი შედეგი ვერ მიიღო:
>>> print letter
a
უმეტესობისთვის პირველი ასო
'banana' - ში არის b და არა a, მაგრამ პითონში ინდექსირება ხდება სტრინგის დასაწყისიდან
და პირველი სიმბოლოს შესაბამისია ნული ინდექსი.
>>> letter = fruit[0]
>>> print letter
b
'banana' - ში b არის
ინდექსად 0. a არის
1 და n არის 2.
შეგიძლია გამოიყენო გამოსახულება ცვლადების და ოპერატორების ჩათვლით, როგორც ინდექსი, მაგრამ ინდექსის მნიშვნელობა უნდა
იყოს მთელი რიცხვი. სხვა შემთხვევაში მიიღებ:
>>> letter = fruit[1.5]
TypeError: string indices must be integers
6.2
სტრინგის სიგრძის გაგება
len - ის გამოყენებით
len არის ჩაშენებული ფუნქცია, რომელიც
აჩვენებს სიმბოლოების რაოდენობას სტრინგში
>>> fruit = 'banana'
>>> len(fruit)
6
სტრინგის ბოლო სიმბოლოს გამოსატანად შეიძლება დაწერო რამე მსგავსი შეცდომა:
>>> length = len(fruit)
>>> last = fruit[length]
IndexError: string index out of range
IndexError - ის მიზეზი ისაა რომ
'banana' - ში არაა სიმბოლო ინდექსით 6.
მას შემდეგ, რაც 0 - იდან თვლა დავიწყეთ, 6 სიმბოლო დანომრილია 0 - დან 5 -
ის ჩათვლით. ბოლო სიმბოლო რომ გამოიტანო length - ს უნდა გამოაკლო 1.
>>> last = fruit[length - 1]
>>> print last
a
სხვანაირად რომ ვთქვათ, შეგიძლია გამოიყენო უარყოფითი ინდექსები, რომელიც
ითვლის უკუღმა - სტრინგის ბოლოდან. fruit[-1] მიუთითებს ბოლო სიმბოლოზე, fruit[-2] - ბოლოდან მეორეზე და.ა.შ.
6.3
Traversal through a string with a loop
ბევრ გამოთვლაში სტრინგი ასო - ასო მუშავდება. ხშირად გამოთვლას იწყებენ თავიდან, ყოველ
ჯერზე იღებენ თითო სიმბოლოს, რამეს უკეთებენ და ასე ბოლომდე. დამუშავების ამ ნიმუშს ეძახიან "გადაკვეთას”. ერთ - ერთი
მეთოდი "გადაკვეთა" while
მარყუჟის დასაწერად:
index = 0
while index < len(fruit):
letter = fruit[index]
print letter
index = index + 1
ეს მარყუჟი გადაკვეთს სტრინგს და გამოსახავს თითოეულ ასოს თითო ხაზზე.
მარყუჟის პირობაა: index <
len(fruit), ასე რომ, როცა index ტოლია
სტრინგის სიგრძის, პირობა მცდარია და მარყუჟის კოდი არ განხორციელდება. სტრინგში ბოლო სიმბოლოა - len(fruit) – 1.
სავარჯიშო 6.1 დაწერე
while მარყუჟი, რომელიც იწყება სტრინგის ბოლო სიმბოლოდან,
ჩამოდის პირველ სიმბოლომდე და ბეჭდავს ყოველ ასოს ცალკე ხაზზე.
"გადაკვეთის" დასაწერად სხვა მეთოდია for მარყუჟი:
for char in fruit:
print char
ყოველ დამარყუჟებაზე ყოველი მომდევნო სიმბოლო უტოლდება ცვლადს char. მარყუჟი
გრძელდება სტრინგის ბოლომდე.