7A: Stringler

Ders 7'nin üç bölümü var; A, B, C. İstediğiniz sırayla devam edebilirsiniz.

Şu ana kadar stringleri (str tipindeki nesneler)  sadece basit yollardan kullandık. Bu derste stringlere müdahale etmeyi öğreneceğiz: onları nasıl parçalara ayırabiliriz, ayrı stringleri nasıl birleştirebiliriz, stringleri oluşturan karakterleri tek tek nasıl görüntüleyebiliriz.

String nedir?

Bir bilgisayardaki tüm bilgiler en temelde 0 ve 1 'ler den oluşan diziler hâlinde saklanır. Buna metinler, dijital kitaplar, resimler, müzikler, videolar ve oyun veya uygulamalar gibi "çalıştırılabilir dosyalar" da dâhildir. String, bir metin verisi örneğidir ve şu şekilde depolanır:

  • string bir karakterler dizisidir (mesela, "Hello, World!"  stringinde "H", "e" harfleri ile boşluk ve noktalama işaretleri de  " ", "!" dâhil olmak üzere 13 karakter vardır.
  • her karakter bir rakamla temsil edilir (mesela, "H" 40 rakamı ile temsil edilir; bu onun ASCII/Unicode değeridir.)

(Sayılar da iç sistemde 0-1 binary formatında depolanır.)

Karakter dizisi olan stringlerde değişiklik yapmak: S[]

Bir stringde değişiklik yapmak istersek, stringi oluşturan karakterleri hedef almamız gerekir. Bunu Python'da şöyle yaparız:  S bir string ve  index bir tamsayıdır;

S[index]
notasyonu index noktasındaki  S karakterini getirir.  Teamüllere göre stringin birinci indeksi 0'dır: yani S[0] ilk karakteri, S[1] ikinci karakteri, vd. gösterir. "Hello, World!" stringindeki karakterler:

Index: 0  1  2  3  4  5  6  7  8  9 10 11 12
Char.: H  e  l  l  o  ,     W  o  r  l  d  !
İndeks 6'daki karakterin boşluk olduğunu hatırlatalım.

Pek çok diğer programlama dilinde, karakterler için ayrı bir tip vardır. Python'da ise karakterler, string uzunluğu -1 stringle aynı şeydir, yani bunun tipi str.

Bir stringdeki karakter sayısını bulmak: len

Bir stingdeki karakter sayısını bulmak için Python fonksiyonlarından biri olan len (length- uzunluk- kelimesinin ilk kısmı) kullanılır. Mesela, len("Hello, World!") 13'tür.

Multiple Choice Exercise: Son Karakter
Bir S stringindeki son karakteri görmek için hangi ifadeyi yazabiliriz?
Doğru! Ama dikkat edelim, len(S) bize stirngin içindeki toplam karakter sayısını veriyorsa da, birinci index 0'dan başladığı için son karakterin indeksi len(S)-1 oluyor.

Şimdi öğrendiğimiz len ve [], araçlarıyla bir alıştırma yapalım.

Example: String uzunluğu ve karakterler

Stringleri kesmek: S[:]

Bir stringi parçalara ayırmakla substring elde ederiz. Mesela "kal" ve "balık" stringleri, "kalabalık" stringinin substringleridir.  Python'da bir substring oluşturmak için

S[firstIndex:tailIndex]
sözdizimini kulllanırız; başlangıç noktamız ilk indeks firstIndex ve bitiş noktamız son indekstir tailIndex-1. Bu kodu çalıştırmadan önce sonucu tahmin etmeyi deneyin.
Example: Substring

Substring alırken ilk indeks (firstIndex) dâhil, son indeks (tailIndex) hariçtir. Buna dikkat edilmezse sık hata yapılır. Ama bunun da iyi tarafı var. Mesela, bu kural sebebiyle  S[i:j] gibi bir substringin uzunluğu her zaman  j-i olacaktır. Bu teamül genellikle bir cetvelle gösterilir:

Coding Exercise: String Traşlama
Bir program yazın; input() kullanarak string oluşturun, çıktı olarak aynı stringi versin ama ilk ve son karakterleri yazmasın. (Tabii input stringinin 2 karakterden uzun olmasını bekliyoruz.) Mesela inputta Yarın dediğinizde doğru çıktı arı olacak.
You may enter input for the program in the box below.

Stringleri yapıştırmak: +

Hepimiz biliyoruz ki 1+2=3. Ama stringler söz konusu ise sonuç aşağıdaki gibidir:

Example: String Toplama

Gördüğünüz gibi, S+T ile yeni bir string oluşturmuş oluyoruz, bu stringin ilk kısmında  S son kısmında da T var. Bu string yapıştırma işlemine  birbirine bağlama (concatenation) denir.

Coding Exercise: Başlar ve ayaklar
Stringi input() kullanarak alacağınız bir program yazın, program çıktı olarak aynı stringi versin ama ilk ve son karakterler yer değiştirmiş olsun. (Tabii en az 2 karakter içeren bir input gerekiyor.) Mesela, input Yarın ise program bize stringi nıraY şeklinde versin. İpucu: önceki programda kullandığınız çözümü bu programın bir parçası olarak kullanın.
You may enter input for the program in the box below.

İsterseniz sayıları da birbirne bağlayabilirsiniz, ama önce onları str tipine değiştirmeniz gerekir. Yoksa kodu yazdığınız sıralamaya bağlı olarak iki hatadan biri ile karşılaşırsınız. Bu programı çalıştırarak muhtemel hataları inceleyebilirsiniz.
Example
Satırların yerlerini değiştirerek 2 farklı bağlama hatasına göz atın.
  • print("çak " + 5)
  • print(110 + " yüzde")
Buradaki doğru bir örnek: str() fonksiyonu ile nesnleri bağlamadan önce sayıyı stringe çevirdik.
Example
Bir sayıyı stringe çevirmek için  str() kullanımı

4. derste anlattığımız gibi stringleri sayılarla çarparak çoğaltabiliriz: S * n formülü ile S + S + ... + S işlemini kısaltmış oluyoruz.

Example
Stringle çarpım yapma

Karakter kodları: ord, chr

Bu dersin girişinde belirttiğimiz gibi, tüm karakterler aslında bilgisayarda rakamlarla temsil edilir. Hangi rakam hangi karaktere tekabül eder? Bu genellikle bilgisayarınızın hangi kodlamayı (encoding) kullandığına göre değişir, ama neredeyse tüm modern bilgisayarlarda 32 ile 255 arası rakamlara karşılık gelen standart bir karakter seti vardır. Burada 32 ile 127 arası karakterleri gösteren numaraların bir listesini veriyoruz:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
8. derste bu tabloyu oluşturacağınız bir program yazacaksınız.
Tüm tabloyu ezberlemeye çalışmanın bir gereği yok ama yine de bazı noktaları hatırda tutmak faydalı olacaktır:

  • küçük harfler  sırasıyla a, b, c, ..., z ardışık karakter kodlarına sahiptir
  • büyük harfler sırasıyla A, B, C, ..., Z ardışık karakter kodlarına sahiptir
  • rakamlar sırasıyla 0, 1, 2, ..., 9 ardışık karakter kodlarına sahiptir

32 karakteri boşluktur, 127 ise birçok özel "kontrol" karakterinden biridir. Bunlardan 9 tab, 10 ve 13 paragraf karşılığı olan bazı kullanışlı karakterlerdir.

Python'da, bir karakteri karşılığı olan nümerik koda çevirmek için  ord fonksiyonu kullanılır. chr fonksiyonu da tam tersini yapar: input olarak aldığı rakamı, tekabül ettiği karaktere çevirir.

Example
 ord ve chr örnekleri

Coding Exercise: Sonraki harf
Input olarak bir karakter alan (uzunluğu 1 olan bir string) bir program yazın, bir büyük harf olduğunu varsayalım; output da alfabede ondan sonra gelen büyük harf olsun. Eğer input 'Z' ise output 'A' olmalı. (Burada  if ifadesi kullanmamız gerekiyor. Başka bir ipucu için buraya tıklayın.)
You may enter input for the program in the box below.

Bazı sistemler sadece 32 ve 127 arasındaki karakterleri yazdırmayı destekler, diğerleri 255 veya 65535'e kadar karakterleri yazdırabilirler; Unicode içerisinde yüz binlerce karakter vardır. Bunların tarihi gelişimini buradan veya buradan okuyabilirsiniz.

Dersi bitirirken 2 alıştırma daha yapalım.

Coding Exercise: Pig Latin
Pig Latin saçmalık dili. Bir kelimeyi Türkçeden bu dile çevirmek için ilk harfi en sona getirip, daha sonra da yine sona "ay" eklemek gerekiyor. Mesela maymun kelimesi bu dilde aymunmay; döner kelimesi önerday hâline gelir. Biz deTürkçe bir kelimeyi input olarak alıp Pig Latin diline çeviren bir program yazalım. (Aslında Pig Latin dilinin daha karmaşık kuralları var, ama biz alıştırma için kuralların bir kısmını yok saydık.)
You may enter input for the program in the box below.

Coding Exercise: İsim Oyunu
İsim Oyunu ile herhangi bir kişinin adıyla şarkı yapabiliriz. Şarkıyı dinleyip kuralları programımızda uygulamaya çalışalım:
Programınız bir insan adını input olarak alıp, diyelim "pearl", bunu şarkıdaki gibi değiştirsin:

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
Her isim tüm hâliyle üç kez söylenir; ayrıca üç kere de ilk harfleri b, f veya m ile değiştirilmiş olarak söylenir. (Aslında şarkının kuralları daha karmaşık ama biz alıştırma için kuralların bu kadarıyla yetinelim.)
You may enter input for the program in the box below.

Bir sonraki derse devam!