Python Öğreniyorum 6 – Karakter dizileri Stringler (Soru çözümlü)
Python Öğreniyorum 6 – Karakter dizileri Stringler (Soru çözümlü). Bu videomuzda karakter dizilerini – Stringleri nasıl kullanılabileceğini öğreneceğiz ve örnek soru çözümleri yapacağız.
Merhabalar. Python öğreniyorum serimizin 6.videosuna hoş geldiniz. 5.videomuzda while döngüsünün nasıl kullanılabileceğini öğrenerek örnek soru çözümleri yaptık. Bu videomuzda karakter dizilerini – Stringleri nasıl kullanılabileceğini öğreneceğiz ve örnek soru çözümleri yapacağız. Haydi başlayalım.
Stringler veya Türkçe ismiyle karakter dizileri isminden de anlaşılacağı gibi karakterlerden oluşan dizidir, günlük hayatta kullandığımız yazılardır. String oluşturmak için tek tırnak veya çift tırnak veya üç tırnak kullanılır. Dikkat edilmesi gereken nokta hangisiyle başlandı ise onunla bitirmektir, yani tek tırnakla başlandı ise tek tırnakla bitirilmelidir.
1 2 |
s = 'Bilgisayar Hane' print(s) |
Bilgisayar Hane’nin dersleri ise şu şekilde yazılabilir:
1 2 |
s = "Bilgisayar Hane'nin dersleri" print(s) |
Üç tırnak kullanarak farklı satırlarda yazı yazılabilir.
1 2 3 |
s = '''Bilgisayar Hane'nin dersleri''' print(s) |
1 2 |
Bilgisayar Hane'nin dersleri |
+ işareti ile farklı stringler birleştirilebilir.
1 2 3 |
a = 'Bilgisayar ' b = 'Hane' print(a + b) |
1 |
Bilgisayar Hane |
String bir sayı ile çarpılabilir.
1 2 |
s = 'BilgisayarHane ' print(s * 3) |
1 |
BilgisayarHane BilgisayarHane BilgisayarHane |
Python’da verinin tipini type komutuyla öğrenebilirsiniz.
1 2 |
s = "Bilgisayar Hane'nin dersleri" print(type(s)) |
1 |
<class 'str'> |
input ile girilen veri de string tipinde olacaktır. Yazıdaki karakter sayısını bulmak için len fonksiyonu kullanılabilir.
1 2 |
s = input() print(len(s)) |
1 2 |
Bilgisayar Hane 15 |
Yazıdan sayıya veya sayıdan yazıya dönüştürme işlemleri gerekli olabilir. Yazıdan tam sayıya dönüştürmek için int komutu, sayıdan yazıya dönüştürmek için ise str komutu kullanılır.
Mesela programa girilen tam sayının kaç basamaklı olduğunu bulalım.
1 2 |
s = int(input()) print(len(str(s))) |
1 2 |
1234 4 |
String Dilimleme
Stringler karakter dizileridir ve her bir karakterin dizi içerisinde bir yeri vardır, bu indeks olarak isimlendirilir. indeks numarası 0’dan başlar ve soldan sağa doğru artar. Örneğin:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
B | i | l | g | i | s | a | y | a | r | H | a | n | e |
s = ‘Bilgisayar Hane’
indeks numaraları kullanılarak istenilen karaktere ulaşılabilir. Bunun için köşeli parantezler kullanılır.
s[0] == ‘B’
s[5] == ‘s’
indeks numaralandırmaya sondan da başlanılabilir. Bu durumda -1 den başlanılır.
-15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
B | i | l | g | i | s | a | y | a | r | H | a | n | e |
s[-4] == ‘H’
s[-8] == ‘y’
Olmayan bir indeks numarası yazıldığında hata oluşur: IndexError: string index out of range
İki sayı kullanılarak bir aralık alınabilir, 1.sayı dahil 2.sayı dahil değildir.
s[5:10] == ‘sayar’
Bu kullanımda kullanılan sayılar maksimum indeks sayısından büyük ise hata oluşmaz.
Burada negatif indeksler kullanılabildiği gibi karışık da kullanılabilir.
İkinci sayı yazılmazsa sonuna kadar, birinci sayı yazılmazsa baştan alır.
s[5:] == ‘sayar Hane’
İki sayı da yazılmazsa string tamamen alınır.
s[:] == s
Üç sayı kullanılırsa, 1.sayıdan 2.sayıya kadar 3.sayı miktarınca atlayarak alınır.
s[1:10:2] == ‘igsyr’
Üçüncü sayı negatif alınırsa sondan başlar. Örneğin:
s[::-1] == ‘enaH rayasigliB’
String Metodları
‘a’ in ‘bilgisayarhane’ | True | ‘a’ ‘bilgisayar’ da var mı? Varsa True, yoksa False |
‘a’ not in ‘bilgisayarhane’ | False | ‘a’ ‘bilgisayar’ da yok mu? Yoksa True, varsa False |
‘Bilgisayar’+’ ‘+’Hane’ | ‘Bilgisayar Hane’ | + birleştirmek için kullanılır. |
‘Hane’ * 3 | ‘HaneHaneHane’ | * String sayı adedince kopyalanılır |
‘bilgisayarhane'[5] | ‘s’ | 5.ci indeksli karakteri verir |
‘bilgisayarhane'[0:10:2] | ‘bliaa’ | 0’dan 10’a kadar 2 atlayarak alır |
len(‘bilgisayarhane’) | 14 | Karakter sayısını verir |
‘bilgisayarhane’.find(‘s’)) | 5 | Soldan ilk bulunan ‘s’ in indeksini verir |
‘bilgisayarhane’.rfind(‘a’)) | 11 | Sağdan ilk bulunan ‘a’ nın indeksini verir |
‘bilgisayarhane’.replace(‘a’, ‘A’) | ‘bilgisAyArhAne’ | Bütün bulunan ‘a’ ları ‘A’ ya yer değiştirir. |
‘bilgisayarhane’.count(‘a’)) | 3 | ‘a’ nın tekrarlanma sayısını verir |
‘bilgisayarhane’. startswith(‘b’)) | True | ‘b’ ile başlıyormu? |
‘bilgisayarhane’. endswith(‘b’)) | False | ‘b’ ile bitiyormu? |
‘bilgisayar’ += ‘hane’ | ‘bilgisayarhane’ | ‘bilgisayar’ a ‘hane’ eklenir |
‘123’.isdigit() | True | Bütün karakterler sayı mı? |
‘bilgisayarhane’.isalpha() | True | Bütün karakterler harf mi? |
‘bilgisayar-hane’.isalnum() | False | Bütün karakterle sayı veya harf mi? |
‘BILGISAYARHANE’.lower() | ‘bilgisayarhane’ | Bütün harfleri küçültür |
‘bilgisayarhane’. upper () | ‘BILGISAYARHANE’ | Bütün harfleri büyültür |
‘bilgisayarhane ‘.strip() | ‘bilgisayarhane’ | Başta ve sonda bulunan boşlukları siler. Ayrıca lstrip – sadece soldan, rstrip sadece sağdan siler |
‘bilgisayar’.ljust(15, ‘-‘) | ‘bilgisayar—–‘ | ‘-‘ eklenilerek karakter sayısı 15’e tamamlanır. rjust diğer taraftan ekler. |
bool(‘bilgisayar’) | True | String boş değilse True, boşsa False |
Ayrıca 3 tane önemli metod daha bulunmaktadır ki, bu metodlar bir sonraki listeler konusuyla da ilişkilidir. Bunlar split, join ve list metodlarıdır.
‘bilgisayar hane’.split() – [‘bilgisayar’, ‘hane’] String i boşluklardan ayırarak listeye dönüştürdü. split() parantezleri içerisinde bölünme stringi de belirtilebilir.
‘bilgisayar hane’.split(‘a’) – [‘bilgis’, ‘y’, ‘r h’, ‘ne’]
‘-‘.join([‘bilgi’, ‘sayar’, ‘hane’]) – bilgi-sayar-hane join ise listedeki stringleri belirtilen stringle birleştirir.list(‘bilgisayar’) – [‘b’, ‘i’, ‘l’, ‘g’, ‘i’, ‘s’, ‘a’, ‘y’, ‘a’, ‘r’] list string deki her karakteri ayırarak bir liste oluşturur. Bütün metodlara ulaşmak için print(dir(str))şeklinde yazabilirsiniz.
1 2 3 |
ad = 'Bilgisayar Hane' yas = 1 print(f'Adım {ad} ve ben {yas} yaşındayım.') |
1 |
Adım Bilgisayar Hane ve ben 1 yaşındayım. |
Son olarak f-string ile string formatlamaya göz atalım. formatted string.
f-string değişkenlerin değerleri alır ve string içerisine yerleştirir.
Burada değişkenlerde başka, liste veya sözlük elemanları, nesne metodları, temel aritmetik işlemler ve hatta fonksiyon çağrılması yapılabilir.
Ayrıca sayıların düzenli olarak görüntülenmesinde de sıklıkla kullanılır.
1 |
print(f"Pi sayısı - {(22/7):.2f}") |
1 |
Pi sayısı - 3.14 |
Soru Çözümleri
- Kelime sayısı
Girilen yazıdaki kelime sayısını bulan programı yazınız. Kelimelerin arasında boşluk bulunmaktadır.
Giriş:
Bilgisayar Hane bilgisayar dersleri
Çıkış:
4
1 2 |
s = input() print(s.count(' ')+1) |
- En uzun kelime
Girilen yazıdaki en uzun kelimeyi ve uzunluğunu yazan programı yazınız.
Giriş:
BilgisayarHane bilgisayar dersleri
Çıkış:
BilgisayarHane 14
1 2 3 4 5 6 7 8 |
yazi = input().split() m = '' mx = 0 for kelime in yazi: if len(kelime) > mx: m = kelime mx = len(kelime) print(m, mx) |
- Palindrom yazı
Girilen yazı palindrom ise Evet, değilse Hayır yazan programı yazınız. Yazıdaki boşluklar hesaba katılmayacak.
Palindrom: soldan sağa ve sağdan sola okunduğunda aynı olan yazıdır.
Giriş:
Kasayla bal yasak
Çıkış:
Evet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
s = input() t = '' for i in range(len(s)): if s[i] != ' ': t += s[i] kontrol = True for i in range(len(t)//2): if t[i].lower() != t[len(t)-1-i].lower(): kontrol = False break if kontrol: print('Evet') else: print('Hayır') |
- Şehir oyunu
Programa birinci şehir ismi girilir ve daha sonra ikinci şehir ismi girilir. Birinci şehrin son harfi ile ikinci şehrin ilk harfi aynı ise yeni şehir okumaya devam edilir. Daha önceki ikinci şehir birinci gibi kabul edilir ve son girilen şehir ikinci şehir olur. Böylece Kural sağlandığı sürece şehir ismi girilmeye devam edilir. Kural bozulduğu zaman en son girilen şehir, yani kuralı bozan şehir yazılır.
Giriş:
aydın
nigde
erzurum
manisa
kayseri
Çıkış:
kayseri
1 2 3 4 5 6 |
a = input() b = input() while a[-1] == b[0]: a = b b = input() print(b) |
- Kullanıcı ismi
Kullanıcı ismi sadece harf, rakam ve alt çizgi(_) içerebilir. Eğer kurallara uygunsa program OK yazar, değilse ilk hatalı karakter yazılır.
Giriş:
bilgisayar_123
Çıkış:
OK
Giriş:
bilgisayar*123
Çıkış:
*
1 2 3 4 5 6 7 8 9 10 11 |
a = input() kontrol = True for i in range(len(a)): if a[i] in '1234567890_abcdefghijklmnopqrstuvwxyz': continue else: kontrol = False print(a[i]) break if kontrol: print('OK') |