? Okuma Hesaplanıyor... Okuma: %0
0

Bir String Aslında Nedir? (Python 7.Ders)

Resim

BÖLÜM 7 — Metnin Derinliği: Bir String Aslında Nedir?

Bu bölümün temel sorusu
Birinci derste string'i "tırnak içindeki yazı" olarak tanımladık ve geçtik. Ama bir string, aslında bir liste gibi davranabiliyorsa (indekslenebiliyorsa) ne demek bu? Metin, Python için tam olarak nedir?


🎯 Bölümün Öğrenme Hedefleri
Bu bölümün sonunda öğrenci;
  • bir string'in aslında karakterlerden oluşan sıralı bir dizi olduğunu ve bunun listeyle neden bu kadar benzer davrandığını,
  • dilimlemenin (slicing) hangi problemi çözdüğünü,
  • yaygın string metotlarının (".split()", ".join()", ".replace()", ".strip()") hangi ihtiyaçtan doğduğunu,
  • string'lerin neden değiştirilemez (immutable) olduğunu ve bunun demetlerle olan bağlantısını,
  • f-string'in eski biçimlendirme yöntemlerine göre hangi sorunu çözdüğünü
açıklayabilecek duruma gelecektir.


📌 Geçen Bölümde Neler Öğrendik?
6.derste demet, sözlük ve kümelerle listenin yetersiz kaldığı durumları çözmeyi öğrendik. Bu bölümde ilginç bir bağlantı kuracağız: string'ler, aslında Bölüm 5-6'da öğrendiğimiz "sıralı, indekslenebilir ama değiştirilemez" bir veri yapısına çok benziyor — tıpkı bir demet gibi.


7.1. Her Şey Bir Sorunla Başladı
Birinci derste 'print("Merhaba")' yazdığımızda, "Merhaba" ifadesini tek bir bütün gibi düşündük. Ama gerçek hayatta metinle çalışırken ihtiyaçlarımız çok daha karmaşıktır:
  • Bir kullanıcı adının sadece ilk 3 harfini almak istersen?
  • Bir cümleyi kelimelere ayırıp tek tek işlemek istersen?
  • Bir metindeki fazladan boşlukları temizlemek istersen?
  • Birden fazla değişkeni tek bir cümle içine güzelce yerleştirmek istersen?
Birinci dersteki bilgimiz ("print()", tırnak işaretleri) bunların hiçbirine cevap vermiyor. Bu bölümde string'i "bütün bir blok" olmaktan çıkarıp, üzerinde ustalıkla çalışabileceğimiz bir yapıya dönüştürüyoruz.


7.2. Büyük Fikir: Bir String Aslında Bir Karakter Dizisidir
kelime = "Python"
print(kelime[0])  # P
print(kelime[1])  # y
print(kelime[5])  # n[/code]
Bu, beşinci dersteki liste indekslemesine çok tanıdık geliyor değil mi? Bu tesadüf değil Python'da bir string, aslında  karakterlerden oluşan sıralı bir dizidir . "Python" kelimesi, Python'un gözünde şuna benzer:
Kod:
Index:    0    1    2    3    4    5
Karakter: P    y    t    h    o    n


BİLGİ
💡 Büyük Fikir: Beşinci derste öğrendiğimiz index mantığı (0'dan başlama, negatif index ile sondan sayma) string'ler için de birebir geçerlidir:
Kod:
print(kelime[-1])   # n  (son karakter)
print(len(kelime))  # 6  (6 karakter)


7.3. Dilimleme (Slicing): Bir Parçayı Almak
Peki tek bir karakter değil de bir aralık almak istersek?
Kod:
kelime = "Python"
print(kelime[0:3])    # Pyt
print(kelime[2:5])    # tho
print(kelime[:4])     # Pyth   -- başlangıç belirtilmezse baştan başlar
print(kelime[3:])     # hon    -- bitiş belirtilmezse sona kadar gider

DERSTE
🤔 Neden "kelime[0:3]" "Pyt" Veriyor, "Pyth" Değil?
Bunu dördüncü dersteki "range()" mantığıyla birleştirelim, hatırlarsanız "range(1, 6)" de 6'yı hariç tutuyordu. Dilimleme de aynı kurala uyar:  başlangıç dahil, bitiş hariç.  "kelime[0:3]" demek "0. index'ten başla, 3. index'e gelmeden dur" demektir yani 0, 1, 2. index'leri alır (P, y, t).
Bu tutarlılık tesadüf değil, Python'da "range()", liste dilimleme ve string dilimleme aynı "başlangıç dahil, bitiş hariç" kuralını paylaşır. Bir yerde öğrendiğinde, her yerde işine yarar.
 Adım (step) ile dilimleme: 
Kod:
print(kelime[::2])    # Pto   -- ikişer ikişer atla
print(kelime[::-1])   # nohtyP  -- string'i ters çevirir!
"[::-1]" özellikle çok kullanılan bir kalıptır, adımı -1 yaparak baştan sona değil, sondan başa gitmesini sağlar, bu da string'i tersine çevirir.


7.4. String'ler Neden Değiştirilemez (Immutable)?
Kod:
kelime = "Python"
kelime[0] = "J"   # HATA! 'str' object does not support item assignment
Altıncı derste demetlerin neden değiştirilemez olduğunu konuşmuştuk "bu veri asla değişmemeli" garantisi vermek için. String'ler de aynı felsefeyle tasarlanmıştır: bir kez oluşturulan bir metin, yerinde değiştirilemez.

DERSTE
🤔 Peki Bir String'i Nasıl "Değiştiririz"?
Aslında değiştirmeyiz  yeni bir string oluştururuz :
PHP Kod:
kelime = "Python"
yeni_kelime = "J" + kelime[1:]
print(
yeni_kelime)   # Jython 
Burada "kelime" hiç değişmedi, sadece "yeni_kelime" adında tamamen yeni bir string oluşturduk. Bu, string metotlarını anlamanın anahtarıdır:  hiçbir string metodu orijinal string'i değiştirmez, hepsi yeni bir string döndürür. 

7.5. String Metotları: Yaygın İhtiyaçlara Hazır Çözümler
 ".upper()" ".lower()"  büyük/küçük harfe çevirme:
PHP Kod:
isim = "ahmet"
print(isim.upper())   # AHMET
print(isim.lower())   # ahmet  (zaten küçüktü) 

🤔 Ne Zaman İşe Yarar?Kullanıcı girdilerini karşılaştırırken. "Ahmet" == "ahmet" sonucu False verir (üçüncü dersten hatırla Sağ ok Python büyük/küçük harfe duyarlıdır). Ama  isim1.lower() == isim2.lower()  yaparsan, harf büyüklüğünden bağımsız bir karşılaştırma yapabilirsin.


 .strip()  baştaki ve sondaki boşlukları temizleme:
PHP Kod:
girdi = "   Ahmet   "
print(girdi.strip())   # "Ahmet"  (baş ve son boşluklar gitti) 

🤔 Neden Bu Kadar Önemli?input() ile kullanıcıdan veri aldığında (birinci derste görmüştük), kullanıcı yanlışlıkla fazladan boşluk bırakabilir. .strip() olmadan  "Ahmet"  ile  "Ahmet "  Python için farklı string'lerdir, bu, form doğrulama gibi durumlarda ciddi hatalara yol açabilir.


 .replace()  bir parçayı başka bir şeyle değiştirme:
PHP Kod:
cumle = "Python zor bir dildir"
yeni_cumle = cumle.replace("zor", "kolay")
print(
yeni_cumle)   # Python kolay bir dildir 
```

 .split()  bir string'i parçalayıp liste yapma:
PHP Kod:
cumle = "elma armut muz"
kelimeler = cumle.split()
print(
kelimeler)   # ['elma', 'armut', 'muz'] 

🤔 Neden Bu Kadar Kritik Bir Fonksiyon?Çünkü altıncı derse kadar öğrendiğimiz tüm veri yapıları (liste, demet, sözlük, küme) genelde önceden hazır veriyle çalışıyordu. Ama gerçek dünyada veri genelde bir metin olarak gelir (bir dosyadan, bir kullanıcıdan, bir web sayfasından). .split(), ham metni işlenebilir bir listeye çevirerek, beşinci derste öğrendiğimiz tüm liste araçlarını (döngü, indeksleme) kullanmamızı sağlar.


Virgülle ayrılmış bir metni de parçalayabilirsin:
PHP Kod:
veri = "Ahmet,25,İstanbul"
parcalar = veri.split(",")
print(
parcalar)   # ['Ahmet', '25', 'İstanbul'][php]
 
[kirmizi].join()[/kirmizi] — [kirmizi].split()[/kirmizi]'in tersi, bir listeyi tek bir string'de birleştirme:
[
php]kelimeler = ["Python", "öğreniyorum"]
cumle = " ".join(kelimeler)
print(
cumle)   # Python öğreniyorum[php]
 
[bilgicik][b]🤔 [kirmizi].join()[/kirmizi]'i Neden [kirmizi]" "[/kirmizi] Üzerinden Çağırıyoruz, [kirmizi]kelimeler[/kirmizi] Üzerinden Değil?[/b]
Bu, yeni başlayanların garipsediği bir sözdizimidir. Mantığı şöyle: [kirmizi].join()[/kirmizi], listedeki elemanları [kirmizi]hangi karakterle[/kirmizi] birleştireceğini bilmek zorunda, bu yüzden metot, [kirmizi]"birleştirici"[/kirmizi] olan string'
e [kirmizi](" ")[/kirmizi] ait, birleştirilecek listeye değil. [kirmizi]" ".join(kelimeler)[/kirmizi] cümlesini [sari]"boşluk karakteriyle, şu listeyi birleştir"[/sari] diye okuyabilirsiniz.[/sari][/bilgicik]
 
[
baslik]7.6. f-string: Metin İçine Değer Yerleştirmenin Modern Yolu[/baslik]
Birinci derste f-string'e kısaca değinmiştik, şimdi neden var olduğunu tam anlayalım.
 
[php]isim = "Ahmet"
yas = 25[php]
 
İkinci derste öğrendiğimiz gibi, string ile sayıyı [sari]+[/sari] ile birleştiremiyoruz bunun için tip dönüşümü gerekiyordu:
[php]print("Adım " + isim + ", yaşım " + str(yas)) 

Bu çalışır ama okunması zor ve yazması yorucudur ayrıca her değişken için + ve str() eklemen gerekir. f-string bu sorunu çözer:
PHP Kod:
print(f"Adım {isim}, yaşım {yas}")
# Çıktı: Adım Ahmet, yaşım 25 

💡 Büyük Fikir Başına f konan bir string içinde, süslü parantez { } içine yazdığın her şey Python tarafından değerlendirilip string'e otomatik olarak dönüştürülür yani str() çağırmanıza bile gerek kalmaz. Hatta içine işlem de yazabilirsiniz:
PHP Kod:
print(f"3 yıl sonra yaşım {yas + 3} olacak")
# Çıktı: 3 yıl sonra yaşım 28 olacak 


BİLGİ
🤔 Neden f Harfi?
f,  format 'ın kısaltmasıdır Python'a "bu string'i biçimlendireceğim, içindeki süslü parantezlere dikkat et" demenin yoludur. f-string olmadan Python, {isim} ifadesini olduğu gibi (düz metin olarak) yazdırırdı.

7.7. Hepsini Birleştirelim ve Küçük Bir Örnek
PHP Kod:
girdi = "  Ahmet,25,İstanbul  "
 
temiz_girdi = girdi.strip()               # baş/son boşlukları temizle
parcalar = temiz_girdi.split(",")          # virgülden parçala
 
isim = parcalar[0]
yas = int(parcalar[1])                     # Bölüm 2'deki tip dönüşümü
sehir = parcalar[2]
 
print(
f"{isim}, {yas} yaşında ve {sehir}'de yaşıyor.")
# Çıktı: Ahmet, 25 yaşında ve İstanbul'de yaşıyor. 

Bu küçük örnekte, ham (ve biraz "kirli") bir metin girdisini alıp, temizleyip, parçalayıp, anlamlı parçalara ayırıp, sonunda okunabilir bir cümleye dönüştürdük. Bu, gerçek dünyadaki veri işlemenin neredeyse tamamının özünü oluşturur.


⚠️ Kavram Yanılgıları
❌ Yanlış düşünce: " 'kelime[0] = 'J' yazarak bir string'in ilk harfini değiştirebilirim, tıpkı listede olduğu gibi."
✅ Daha doğru düşünce: String'ler değiştirilemezdir (immutable) bir önceki dersteki demetler gibi. Bir string'i "değiştirmek" istediğinde aslında yeni bir string oluşturursun.

❌ Yanlış düşünce: " 'kelime[0:3]' ifadesi 0, 1, 2, 3. index'leri (4 karakter) verir."
✅ Daha doğru düşünce: Dilimleme başlangıç dahil, bitiş hariç çalışır. 'kelime[0:3]' sadece 0, 1, 2. index'leri (3 karakter) verir. Bu, 'range()' ile aynı kuralı paylaşır.

❌ Yanlış düşünce: " '.split()' ve '.join()' birbirinden bağımsız, ilgisiz iki fonksiyondur."
✅ Daha doğru düşünce: Birbirinin tam tersidir '.split()' bir string'i parçalayıp liste yapar, '.join()' bir listeyi birleştirip string yapar. Bu ikisini bir çift olarak düşünmek hatırlamayı kolaylaştırır.


👨‍🏫 Öğretmen Notu
String'ler anlatılırken en büyük fırsat, bunu tamamen izole bir konu gibi değil,  daha önce öğrenilen liste ve demet bilgisiyle bağlantılı  olarak sunmaktır. Önerilen sıra:
  1. String'in aslında bir karakter dizisi olduğu, beşinci dersteki liste indekslemesiyle birebir karşılaştırılarak gösterilir.
  2. Dilimleme, dördüncü dersteki "range()" mantığıyla ("başlangıç dahil, bitiş hariç") açıkça ilişkilendirilir, bu tekrar, kuralın tesadüfi değil tutarlı bir tasarım olduğunu gösterir.
  3. String'in neden değiştirilemez olduğu, altıncı dersteki demet mantığıyla bağlanır.
  4. String metotları, her biri için "bu hangi gerçek sorunu çözüyor" sorusuyla (kullanıcı girdisi temizleme, veri parçalama) somutlaştırılır.
  5. f-string, ikinci dersteki tip uyumsuzluğu sorununa ('+' ile string/sayı birleştirememe) doğrudan bir çözüm olarak sunulur.


✍️ Uygulama Soruları ve Cevapları
 Soru 1:   "Merhaba Dünya" string'inin son 5 karakterini dilimleme kullanarak al.
PHP Kod:
metin = "Merhaba Dünya"
print(metin[-5:])
# Çıktı: Dünya 

 Soru 2:  Bir kullanıcı adının başındaki/sonundaki boşlukları temizleyip, tamamını küçük harfe çeviren kodu yaz.
PHP Kod:
kullanici_adi = "   Ahmet123   "
temiz = kullanici_adi.strip().lower()
print(
temiz)
# Çıktı: ahmet123 

 Soru 3:   "kedi,köpek,kuş" string'ini virgülden parçalayıp bir listeye çevir.
PHP Kod:
hayvanlar = "kedi,köpek,kuş"
liste = hayvanlar.split(",")
print(
liste)
# Çıktı: ['kedi', 'köpek', 'kuş'] 

 Soru 4:   Aşağıdaki kod neden hata verir?
PHP Kod:
kelime = "Merhaba"
kelime[0] = "M"[php]
 
[
kirmizi]Cevap:[/kirmizi] String'ler değiştirilemezdir (immutable). Var olan bir string'in belirli bir index'ine yeni bir karakter atanamaz; bunun yerine yeni bir string oluşturulması gerekir.
 
[yesil]Soru 5:[/yesil]  [mavi]isim = "Zeynep"[/mavi] ve [mavi]puan = 92[/mavi] değişkenlerini kullanarak f-string ile "Zeynep 92 puan aldı" cümlesini oluştur.
[php]isim = "Zeynep"
puan = 92
print(f"{isim} {puan} puan aldı")
# Çıktı: Zeynep 92 puan aldı 


📌 Şu Ana Kadar Neler Öğrendik?
  • Bir string'in aslında karakterlerden oluşan sıralı bir dizi olduğu ve listeyle aynı index mantığını paylaştığı
  • Dilimlemenin ("[başlangıç:bitiş]") başlangıç dahil, bitiş hariç çalıştığı "range()" ile aynı kural
  • String'lerin neden değiştirilemez olduğu ve string metotlarının aslında hep yeni bir string döndürdüğü
  • ".upper()", ".lower()", ".strip()", ".replace()" metotlarının hangi gerçek sorunları çözdüğü
  • ".split()" ile ham metni listeye, ".join()" ile listeyi tekrar metne çevirebildiğimiz
  • f-string'in, ikinci dersteki string/sayı birleştirme sorununu nasıl daha okunabilir çözdüğü

📌 Bu Derste Çıkarılacak En Önemli Sonuç
String bir formülle başlamadı, İlk derste "tırnak içindeki yazı" olarak tanıdığımız bu veri tipi, aslında 5-6.derste öğrendiğimiz liste ve demet mantığının bir karışımıdır: listeler gibi indekslenebilir ve dilimlenebilir, demetler gibi değiştirilemez. Python'da yeni bir konu genelde tamamen yeni bir kural getirmez daha önce öğrendiğin kuralları yeni bir bağlamda tekrar kullanır. Bu yüzden önceki bölümleri iyi anlamak, sonraki bölümleri çok daha kolay hâle getirir.


📝 Bölümün Kısa Özeti
String'ler, karakterlerden oluşan sıralı ve değiştirilemez (immutable) veri dizileridir, bu yüzden hem liste gibi indekslenebilir/dilimlenebilir hem de demet gibi değiştirilemezler. Dilimleme ("[a:b]") başlangıç dahil, bitiş hariç çalışır. String metotları (".upper()", ".strip()", ".replace()", ".split()", ".join()") orijinal string'i değiştirmez, her zaman yeni bir string ya da liste döndürür. f-string ('f"{degisken}"'), değişkenleri metin içine okunabilir ve otomatik tip dönüşümlü bir şekilde yerleştirmenin modern yoludur.

Konuyu Dinle
Hazır. Konuyu dinlemek için Oynat'a basın.

Yazarımız Hasan hakkında: Adım Hasan, ama bir dönem MyBB kullananlar beni Yondaime nicki ile tanırdı. 2009 da başladı web maceram, MyBB, Wordpress, Matematik, Adalet, Bilgisayar Programcılığı, derken şimdide burada bir şeyler yapmaya çalışıyorum :)

user avatar


 

Yazıya herhangi bir yorum yapılmadı

[-]
Hızlı Cevap
Güvenlik Kodu:
Lütfen, resmin üzerindeki harf ve rakamlardan oluşan Güvenlik Kodunu, aşağıdaki metin kutusuna giriniz.
Güvenlik Kodu:
(Büyük/Küçük harf duyarsız)


 
Reklam
Reklam


Kategoriler


Yasal Uyarı
Bu internet sitesi içeriğinde yer alan tüm yazılar Gidenler.Me’ye ait olup, 5846 sayılı Fikir ve Sanat Eserleri Kanunu ve 5237 sayılı Türk Ceza Kanunu kapsamında korunmaktadır. Bu hakları ihlal eden kişiler, 5846 sayılı Fikir ve Sanat eserleri Kanunu ve 5237 sayılı Türk Ceza Kanununda yer alan hukuki ve cezai yaptırımlara tabi olurlar. Gidenler.Me, ilgili yasal işlem başlatma hakkına sahiptir. Gidenler.Me Blog'da yer alan tüm yazılar/makaleler bilgi edinme amacı ile sınırlı olup Gidenler.Me'den izin alınmaksızın değiştirilemez, çoğaltılamaz, yayımlanamaz, dağıtılamaz, umuma iletilemez, başka bir lisana çevrilemez.


Türkçe Çeviri: MyBB, Yazılım: MyBB, © 2002-2026 MyBB Group.
GM v3.0.0.9 Beta theme designed for MyBB