String işlemleri
Programlarda birçok veri sayı değildir: adlar, e-posta adresleri, ürün kodları, şehir adları, dosya adları ve kullanıcı mesajları metin olarak tutulur. Python’da metin değerleri str türündedir.
Bu hafta bir string’in karakterlerine erişmeyi, parçalarını almayı, metni temizlemeyi ve basit doğrulamalar yapmayı öğreneceğiz. Amaç çok sayıda string metodunu ezberlemek değil; metni adım adım dönüştürme ve kontrol etme alışkanlığı kazanmaktır.
Bu hafta neleri yapabilmelisiniz?
Bölümün sonunda:
- bir string’in karakterlerine indeks ile erişebilmeli,
len()ile karakter sayısını bulabilmeli,- negatif indeksin ne anlama geldiğini açıklayabilmeli,
- dilimleme (slicing) ile string’in bir bölümünü alabilmeli,
- string değerlerin değiştirilemez olduğunu açıklayabilmeli,
lower(),upper()vestrip()gibi temel metotları kullanabilmeli,inile bir metnin başka bir metin içinde bulunup bulunmadığını kontrol edebilmeli,- f-string ile okunabilir çıktı oluşturabilmeli,
- basit bir metin doğrulama veya normalleştirme fonksiyonu yazabilmelisiniz.
String: karakterlerden oluşan bir değer
Aşağıdaki değişken bir string tutar:
sehir = "Samsun"Karakterleri soldan sağa düşünelim:
S a m s u n
0 1 2 3 4 5
Python’da indeksler 0’dan başlar.
sehir = "Samsun"
print(sehir[0])
print(sehir[1])
print(sehir[5])Çıktı:
S
a
n
Altı karakterlik bir string’in son geçerli pozitif indeksi 5tir. sehir[6] yazmak IndexError üretir.
len() ile uzunluk
len() string içindeki karakter sayısını verir:
sehir = "Samsun"
print(len(sehir))Sonuç 6dır.
İndeks ile uzunluk arasında önemli bir ilişki vardır:
uzunluk = 6
son indeks = 5
Bu nedenle son karaktere pozitif indeksle ulaşmak için len(metin) - 1 kullanılabilir:
metin = "Python"
print(metin[len(metin) - 1])Python bunun için daha kısa bir yol da sunar.
Negatif indeksler
Negatif indeksler sağdan sayar:
metin = "Python"
print(metin[-1])
print(metin[-2])Çıktı:
n
o
-1 son karakteri gösterir.
Tahmin et — hangi karakterler yazılır?
Kodu çalıştırmadan önce sonucu tahmin edin:
Sonra hücreyi çalıştırıp tahmininizi doğrulayın.
Dilimleme (slicing)
Bir string’in yalnızca bir karakterini değil, bir bölümünü de alabiliriz:
metin = "Programlama"
print(metin[0:7])Sonuç:
Program
Dilimlemede başlangıç indeksi dahil, bitiş indeksi hariçtir.
metin[0:7]
↑ ↑
| └─ 7 dahil değil
└─── 0 dahil
Başlangıç veya bitiş boş bırakılabilir:
dosya = "rapor.pdf"
print(dosya[:5])
print(dosya[6:])Çıktı:
rapor
pdf

Samsun metni üzerinde pozitif ve negatif indeksleri ve bir dilimleme örneğini gösteren string şeması.Alıştırma — ders kodunu parçalayın
"BLP101" değerinden ilk üç karakteri ve son üç karakteri ayrı değişkenlere alın.
Beklenen çıktı:
BLP
101
İlk üç karakter için ders_kodu[:3], son üç karakter için ders_kodu[-3:] kullanılabilir.
ders_kodu = "BLP101"
bolum = ders_kodu[:3]
numara = ders_kodu[-3:]
print(bolum)
print(numara)String değerler değiştirilemez
Bir listenin elemanını daha sonra değiştirebileceğimizi gelecek hafta göreceğiz. String değerlerde ise tek bir karakteri doğrudan değiştiremeyiz:
metin = "kedi"
# metin[0] = "K" # Bu işlem geçerli değildir.Bunun yerine yeni bir string üretiriz:
metin = "kedi"
yeni_metin = "K" + metin[1:]
print(yeni_metin)String’in değiştirilemez (immutable) olması, bir string metodunun da mevcut değeri yerinde değiştirmek yerine yeni değer üretmesi anlamına gelir.
lower(), upper() ve strip()
Metin karşılaştırmalarında büyük-küçük harf ve gereksiz boşluklar sorun çıkarabilir.
girdi = " Python "
temiz = girdi.strip()
kucuk = temiz.lower()
print(temiz)
print(kucuk)strip()baştaki ve sondaki boşlukları kaldırır.lower()harfleri küçük harfe dönüştürür.upper()harfleri büyük harfe dönüştürür.
Önemli nokta:
metin = "Python"
metin.lower()
print(metin)Burada metin hâlâ "Python"dır. Çünkü lower() yeni bir string üretir. Sonucu saklamak gerekir:
metin = metin.lower()İncele ve düzelt — temizlenmiş kullanıcı adı
Aşağıdaki kod kullanıcı adını temizlemek istiyor, fakat metodun dönüş değerini saklamıyor:
Çıktının deniz olması için kodu düzeltin.
kullanici_adi = kullanici_adi.strip().lower() yazabilirsiniz.
kullanici_adi = " DENIZ "
kullanici_adi = kullanici_adi.strip().lower()
print(kullanici_adi)in ile içerme kontrolü
Bir string’in başka bir string içerip içermediğini in ile kontrol edebiliriz:
eposta = "[email protected]"
print("@" in eposta)
print("omu.edu.tr" in eposta)
print("gmail.com" in eposta)Sonuçlar bool türündedir.
Bu özellik koşullarla birleştirilebilir:
dosya = "rapor.pdf"
if ".pdf" in dosya:
print("PDF dosyası")Bu yalnızca basit bir içerme kontrolüdür. Gerçek dosya uzantısı doğrulaması veya e-posta doğrulaması daha ayrıntılı kurallar gerektirebilir.
"@" in eposta sonucu True olması, metnin geçerli bir e-posta adresi olduğunu kanıtlamaz. Basit kontrolleri gerçek doğrulama ile karıştırmayın.
String ve döngüler
Bir string üzerinde for ile karakter karakter gezebiliriz:
metin = "Python"
for karakter in metin:
print(karakter)Örneğin bir metindeki rakamları sayalım:
kod = "BLP101"
rakam_sayisi = 0
for karakter in kod:
if karakter >= "0" and karakter <= "9":
rakam_sayisi = rakam_sayisi + 1
print(rakam_sayisi)Burada "BLP101" içinde üç rakam vardır.
Python’da bunun için hazır string metotları da vardır; ancak önce döngü ve koşul mantığını görünür tutmak faydalıdır.
Alıştırma — belirli karakteri sayın
Bir ürün kodunda kaç tane - karakteri bulunduğunu sayın.
Beklenen sonuç 3tür.
if karakter == "-": koşulu içinde tire_sayisi değerini artırın.
urun_kodu = "TR-55-A-20"
tire_sayisi = 0
for karakter in urun_kodu:
if karakter == "-":
tire_sayisi = tire_sayisi + 1
print(tire_sayisi)f-string ile okunabilir çıktı
Değişkenleri metne yerleştirmenin okunabilir yollarından biri f-string kullanmaktır:
ad = "Deniz"
puan = 82
mesaj = f"{ad} adlı öğrencinin puanı: {puan}"
print(mesaj)Süslü parantezlerin içine ifadeler de yazılabilir:
fiyat = 120
adet = 3
print(f"Toplam: {fiyat * adet} TL")Başlangıçta f-string’i özellikle çıktı üretirken kullanacağız. Karmaşık hesaplamaları süslü parantezlerin içine doldurmak yerine ayrı değişkenlerde hesaplamak çoğu zaman daha okunurdur.
Fonksiyonlarla metin normalleştirme
Aynı temizleme işlemini tekrar kullanacaksak fonksiyon yazabiliriz:
def kullanici_adi_temizle(metin):
return metin.strip().lower()
assert kullanici_adi_temizle(" DENIZ ") == "deniz"
assert kullanici_adi_temizle("Ayse") == "ayse"Bu fonksiyon saf bir dönüşüm yapar: string alır, yeni string döndürür.
Üret — basit kurumsal e-posta kontrolü
Bir metnin:
- başında ve sonunda boşluk varsa temizlenmesini,
- küçük harfe çevrilmesini,
- içinde
@bulunmasını, omu.edu.trifadesini içermesini
kontrol eden kurumsal_eposta_mi fonksiyonunu yazın.
Başlangıç:
Beklenen çıktı:
True
False
Örneğin temiz = eposta.strip().lower() ile başlayabilirsiniz. Sonra iki koşulu and ile birleştirin.
def kurumsal_eposta_mi(eposta):
temiz = eposta.strip().lower()
return "@" in temiz and "omu.edu.tr" in temiz
print(kurumsal_eposta_mi(" [email protected] "))
print(kurumsal_eposta_mi("[email protected]"))Bu fonksiyon yalnızca ders için basitleştirilmiş bir kontroldür. Gerçek e-posta adresi doğrulaması için daha ayrıntılı kurallar gerekir.
Bölüm özeti
Bu hafta string değerleri yalnızca ekrana yazdırılan metinler olarak değil, işlenebilir veri olarak kullandık.
- String indeksleri
0’dan başlar. - Negatif indeksler sağdan erişim sağlar.
len()karakter sayısını verir.- Dilimlemede başlangıç dahil, bitiş hariçtir.
- String değerler değiştirilemez; metotlar yeni string üretir.
strip(),lower()veupper()sık kullanılan normalleştirme araçlarıdır.inbasit içerme kontrolü yapar.- String üzerinde
forile karakter karakter gezilebilir. - f-string, değişkenleri okunabilir biçimde çıktıya yerleştirir.
- Metin temizleme ve kontrol işlemleri fonksiyonlara ayrılabilir.
Kendinizi kontrol edin
"Python"[0]hangi karakteri verir?"Python"[-1]hangi karakteri verir?"Programlama"[0:7]sonucu nedir?strip()neyi kaldırır?metin.lower()çağrısı nedenmetindeğişkenini kendiliğinden değiştirmez?"@" in "a@b"ifadesinin türü nedir?- f-string içinde değişken nasıl kullanılır?
- Basit bir içerme kontrolünün neden tam doğrulama anlamına gelmediğini açıklayın.
Bir sonraki bölümde birden fazla değeri birlikte tutmak için listeler ve demetler kullanacağız.