Sətirlər

Biz ilk dərslərimizdən str (sətir) tipi ilə tanış olmuşduq. İndi isə bu tip haqqında daha ətraflı danışacağıq. Bildiyiniz kimi, sətir simvollar ardıcıllığından ibarət məlumatdır. Daha öncə də qeyd etdiyimiz kimi, sətirlər dırnaq işarələri arasında yazılmalıdır. Bu zaman həm tək, həm də qoşa dırnaq işarələrindən istifadə oluna bilər:

>>> s1 = "Python"
>>> s2 = 'Proqramlaşdırma' 
>>> print(s1)
Python
>>> print(s2) 
Proqramlaşdırma
>>> "Dili"
'Dili'
>>> 'Çox asandır'
'Çox asandır'
>>> print("Biz")
Biz
>>> s1
'Python'
>>> print('öyrənirik') 
öyrənirik
>>>

Yuxarıdakı misallarda bir məqama da diqqət yetirin ki, sətir tipli qiymətlər və ya dəyişənlər icra olunanda nəticə ekrana tək dırnaq arasında çıxır. Amma onları print() funksiyası ilə çapa verəndə ekrana çıxan nəticə dırnaqsız olur.

Dırnaq arasında yazılan bir sətir ifadənin daxilində başqa bir sətir ifadəni dırnaq içərisində yazmaq olar. Lakin bu zaman diqqət yetirmək lazımdır ki, əgər bütöv sətrin özü tək dırnaqdadırsa, daxildəki ifadə qoşa dırnaqda olsun. Tərsinə, bütöv ifadənin özü qoşa dırnaqdadırsa, daxildəki ifadəni tək dırnaqda yazmaq lazımdır:

>>> s1 = "Azərbaycan 'Odlar Yurdu' adlanır." 
>>> s2 = 'Bakı "küləklər şəhəri" adlanır.'
>>> print(s1)
Azərbaycan 'Odlar Yurdu' adlanır.
>>> print(s2)
Bakı "küləklər şəhəri" adlanır. 
>>>

Dırnaq (tək və ya qoşa) arasında yazılan sətir ifadənin içərisində tək dırnaq (apostrof) simvolundan istifadə etmək tələb olunarsa, o zaman apostrof simvolunu tərs bölmə simvolu ilə birlikdə (\’) işlətmək lazımdır. Ümumiyyətlə, dırnaq arasında yazılan ifadələr daxilində tərs bölmə simvolundan istifadə etməklə tək və ya qoşa dırnaqları yazmaq olar. Gəlin aşağıdakı misalları nəzərdən keçirək:

>>> print("Əvvəllər şeir sözü şe\'r kimi yazılırdı.") 
Əvvəllər şeir sözü şe'r kimi yazılırdı.
>>> print('Onun cavabı \"YOX\" oldu.')
Onun cavabı "YOX" oldu.
>>>

Bir sətirdə yer alan string ifadəsini print() funksiyası ilə çıxışda bir neçə sətirdə vermək olar. Bunun üçün xüsusi \n (yeni sətir) simvolundan istifadə etmək lazımdır. İfadə kimi icra olunan sətirlərdə isə \n simvolu təsirsiz qalacaq:

>>> s="Boş zaman yoxdur, \nBoşa keçən zaman var..." 
>>> print(s)
Boş zaman yoxdur,
Boşa keçən zaman var...
>>> s
'Boş zaman yoxdur, \nBoşa keçən zaman var...' 
>>>

Bəzən isə tələb olunur ki, bir sətir ifadə içərisində yer alan \n simvolları adi simvollar ardıcıllığı kimi qəbul olunsun. Biz interpretatorun bu simvollara rast gələndə ifadənin qalan hissəsini yeni sətrə keçirməsini istəmiriksə, sətir ifadənin önünə r simvolunu yazmalıyıq:

>>> print('D:\meyvələr\naringi') 
D:\meyvələr
aringi
>>> print(r'D:\meyvələr\naringi') 
D:\meyvələr\naringi
>>>

Sətir ifadələr bir neçə sətirdə yer ala bilər. Bunun üçün onları üç qoşa dırnaq (“””) simvolları arasında yazmaq lazımdır. Xatırlayırsınızsa, bu simvollardan skript fayllarında şərhlərin yazılmasında da istifadə edirdik. Gəlin nümunələri nəzərdən keçirək:

>>> print(""" 
Bakı şəhəri 
Abşeron rayonu 
Novxanı kəndi 
""")

Bakı şəhəri 
Abşeron rayonu 
Novxanı kəndi
 
>>>

Yuxarıdakı misalda xırda bir məqamı da qeyd etmək yerinə düşər. Diqqətlə baxsanız, görəcəksiniz ki, ekrana çıxarılan mətn başdan bir sətir buraxılaraq çap olundu. Əgər birinci boş sətrin buraxılmasını istəmirsinizsə, açılan üç qoşa dırnaq (“””) simvollarından sonra tərs bölmə (\) simvolundan istifadə etməlisiniz. Bunu özünüz də sınaqdan keçirə bilərsiniz.

Sətirlərin birləşdirilməsi

Əvvəlki dərslərimizin birində biz sətirləri konkatenasiya etməyi, yəni toplama əməliyyatı ilə birləşdirməyi öyrənmişdik:

>>> s1 = "Azər"
>>> s2 = "baycan"
>>> s3 = s1 + s2
>>> print(s3) 
Azərbaycan
>>> "Respub" + "likası" 
'Respublikası'
>>> s4 = "Bakı"
>>> s4 + " " + "şəhəri" 
'Bakı şəhəri'
>>>

String literallar yan-yana yazılmaqla da (+ əməliyyatından istifadə etmədən) birləşdirilə bilər. Bu qayda yalnız sətir literalları üçün keçərlidir, sətir dəyişənlərinə bunu tətbiq etmək olmur:

>>> "Qobu" "stan" 
'Qobustan'
>>> s = "Qobu"
>>> s "stan"
SyntaxError: invalid syntax 
>>>

Yan-yana konkatenasiya üsulu sətir ifadə kimi uzun mətnlərin yazılmasında çox əlverişlidir. Lakin bu zaman mötərizələrdən istifadə etməyi unutmamalısınız:

>>> metn = ('Azərbaycan Dövlət Neft Akademiyası ' 
            'İstehsalat Proseslərinin '
            'Avtomatlaşdırılması Fakültəsi')
>>> metn
'Azərbaycan Dövlət Neft Akademiyası İstehsalat Proseslərinin Avtomatlaşdırılması Fakültəsi'
>>>

Sətirlərin təkrarlanması

Sətirlər üzərindəki ən sadə əməllərdən biri də sətrin bir ədədə vurularaq təkrarlanmasıdır:

>>> s = "Oxumaq "
>>> print(s * 3)
Oxumaq Oxumaq Oxumaq 
>>>

Bu zaman sətir vurulan ədəd qədər təkrarlanacaq. Diqqət edin ki, bu vurma əməliyyatında vuruqlardan biri hökmən ədəd olmalıdır, yoxsa sətri sətrə vurmaq olmaz.

Sətirlərin indekslənməsi

Sətirlər indekslənə bilər. Yəni biz verilmiş sətrin hər hansı bir simvolunu ayrılıqda əldə edə bilərik. İndeksləmənin sintaksisi aşağıdakı kimidir:

sətir[indeks]

Burada sətir sətir tipində verilmiş hər hansı bir qiymət və ya dəyişən ola bilər. Kvadrat mötərizə daxilindəki indeks isə sətrin əldə etmək istədiyimiz simvolunun mövqeyidir. Bu arada qeyd edək ki, proqramlaşdırmada sıra sayları sıfırdan başlayır. Aşağıdakı nümunələri nəzərdən keçirək:

>>> s = "Azərbaycan"
>>> s[0]
'A'
>>> print(s[3])
r
>>> "Bakı"[2]
'k'
>>>

İndeksləmə mənfi də ola bilər:

>>> s = "Abşeron" 
>>> s[-7]
'A'
>>> print(s[-4]) 
e
>>>

İndeksləmənin məntiqini anlamaq üçün aşağıdakı cədvəli nəzərdən keçirin:

+---+---+---+---+---+---+ 
| P | y | t | h | o | n | 
+---+---+---+---+---+---+ 
  0   1   2   3   4   5
 -6  -5  -4  -3  -2  -1

Sətirləri indeksləyərkən indeks kimi mövcud olmayan mövqe göstərildikdə xəta baş verəcək:

>>> s = "Python"
>>> s[6]
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module> 
    s[6]
IndexError: string index out of range 
>>>

Sətirlərin bölünməsi

Yuxarıdakı misallarda indekslərdən istifadə edərək sətrin ayrı- ayrı simvollarını əldə etməyi öyrəndik. Bundan başqa sətirlərin bölünməsi (dilimlənməsi) əməliyyatı da mövcuddur. Bu əməliyyat bizə sətirlərdən alt sətirlər düzəltməyə imkan verir. Sətirlərin bölünməsinin sintaksisi aşağıdakı kimidir:

sətir[n:m]

Burada sətir sətir tipində verilmiş hər hansı bir qiymət və ya dəyişən ola bilər. Kvadrat mötərizə daxilindəki n sətir diliminin başlanğıc (daxil olmaqla), m isə son mövqeyini (daxil olmamaqla) bildirir.
Gəlin aşağıdakı nümunələri nəzərdən keçirək:

>>> s = "Təbriz" 
>>> s[0:3]
'Təb'
>>> print(s[1:5]) 
əbri
>>>

Sətirlərin bölünməsində başlanğıc və son mövqe göstərilmədikdə, başlanğıc mövqe sıfır, son mövqe isə sətrin uzunluğu kimi qəbul ediləcək:

>>> s = "Səttarxan" 
>>> s[:6]
'Səttar' 
>>> s[6:] 
'xan'
>>> s[:] 
'Səttarxan' 
>>>

Sətirlərin bölünməsində mənfi işarəli mövqelərdən də istifadə edə bilərik:

>>> s = "Nizami" 
>>> s[-5:-3]
'iz'
>>> s[-4:-1] 
'zam'
>>>

Sətirlərin dəyişməzliyi

Sətir tipindəki verilənlər dəyişməzdir. Biz sətirlər üzərində hər hansı bir dəyişikliyə cəhd etsək, interpretator xəta ismarıcı verəcək:

>>> s = "Səfər"
>>> s[0] = 'C'
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module> 
    s[0]='C'
TypeError: 'str' object does not support item assignment 
>>>

Bizə fərqli məzmunda sətir lazımdırsa, cari sətirdən istifadə edərək yenisini meydana gətirə bilərik:

>>> s = "Səfər" 
>>> z = 'C' + s[1:]
>>> print(z) 
Cəfər
>>> 'A' + s[2:] + 'in' 
'Afərin'
>>>

Sətirlərin uzunluğu

Verilmiş sətrin uzunluğunu, yəni neçə simvoldan ibarət olduğunu len() funksiyasından istifadə etməklə müəyyənləşdirə bilərik:

>>> s = input("İfadəni daxil edin: ")
İfadəni daxil edin: Azərbaycan Respublikası 
>>> n = len(s)
>>> print("İfadənin uzunluğu:", n, "simvol") 
İfadənin uzunluğu: 23 simvol
>>>

Sətirlərin müqayisəsi

Sətirlər müqayisə operatorlarından istifadə edərək müqayisə oluna bilər. Aşağıdakı proqramda verilmiş iki sətrin bir-birinə bərabər olub-olmaması yoxlanılır:

s1 = input("1-ci ifadəni daxil edin: ") 
s2 = input("2-ci ifadəni daxil edin: ") 
if s1 == s2:
    print("İfadələr bərabərdir.") 
else:
    print("İfadələr bərabər deyil.")

Yuxarıdakı proqramı skriptdə yazaraq icra edin və müxtəlif qiymətlər verərək nəticələri yoxlayın.
Sətirlərin müqayisəsində böyük (>) və kiçik (<) operatorlardan istifadə edilərkən onların müqayisəsi lüğətdəki əlifba sırasına görə aparılır. Əgər s1 sözü lüğətdə s2 sözündən əvvəl gəlirsə, s1 < s2 məntiqi ifadəsinin nəticəsi True, əks halda, False olacaq:

s1 = input("1-ci sözü daxil edin: ") 
s2 = input("2-ci sözü daxil edin: ") 
if s1 < s2:
    print(s1+" sözü "+s2+" sözündən əvvəl gəlir.") 
else:
    print(s2+" sözü "+s1+" sözündən əvvəl gəlir.")

Bu proqramı da yazıb icra edin və müxtəlif qiymətlərdə nəticələrini yoxlayın.
Sonda onu da nəzərinizə çatdırım ki, sətirlər üzərində ümumi ardıcıllıq əməliyyatlarının hamısını icra etmək olar. Bundan başqa, sətirlərlə bağlı bir sıra sətir metodları və ayrıca string modulu da nəzərdə tutulmuşdur.

Sətirlər” üçün bir şərh

Şərh üçün bağlıdır.