Metni parçalara ayırmak ve biçimli yazdırmak
Bilgisayarda metinler string (str) türüyle temsil edilir. Bir string, karakterlerden oluşan sıralı bir dizidir; bu yüzden listelerde göreceğimiz indeksleme ve dilimleme kuralları string’lerde de aynen geçerlidir.
Tek tek karakterlere indeksle, bir bölümüne ise dilimleyerek (slicing) erişilir. İndeks 0’dan başlar; negatif indeks sondan sayar. Dilimde başlangıç dâhil, bitiş hariçtir — tıpkı range() gibi.
Bir string oluşturulduktan sonra içindeki karakterler değişmez. .upper() ve .replace() gibi metotlar var olan metni değiştirmez; yeni bir string döndürür. Sonucu yeniden atamazsak metin değişkeni eski değerini korur.
Bu davranış ileride listelerle karşılaştırıldığında önem kazanacak: listeler yerinde değişir, string’ler değişmez.
String’lerin bir dizi hazır metodu vardır: değerin arkasına nokta koyup çağırdığımız fonksiyonlar. Aşağıdakiler günlük işlerin çoğunu karşılar.
| Metot | Ne işe yarar | Örnek |
|---|---|---|
strip() |
baştaki/sondaki boşlukları siler | " ali ".strip() → "ali" |
split(ayrac) |
metni parçalara ayırıp liste döndürür | "ali,80".split(",") → ["ali", "80"] |
ayrac.join(liste) |
listeyi tek stringe birleştirir | ", ".join(["a","b"]) → "a, b" |
replace(a, b) |
geçen her a’yı b ile değiştirir |
"a-b".replace("-", " ") → "a b" |
upper() / lower() |
büyük / küçük harfe çevirir | "Ali".upper() → "ALI" |
startswith(on_ek) |
metin verilen önekle mi başlıyor | "Ankara".startswith("An") → True |
in |
bir parça metinde geçiyor mu | "py" in "python" → True |
strip() + split() ÖrneğiBir kayıt satırını alanlara ayırmanın standart yolu bu ikilidir. Önce satırın başındaki ve sonundaki boşluklar temizlenir; ardından metin virgüllerden bölünür.
Sayı gibi görünen "85" ve "92" de metindir; hesaplamadan önce int() ile dönüştürülmeleri gerekir. Dosya işlemlerinde okuduğumuz satırları ayrıştırırken bu ikiliyi sıkça kullanacağız.
Programların çoğu sonunda ekrana bir şey yazar; yazdığımız metnin içine değişkenlerin değerlerini yerleştirmemiz gerekir. Python’da bunun en okunur yolu f-string’dir.
Bir değişkenin değerini metnin içinde yazdırmanın üç yolu var. İlk ikisi çalışır ama okunması zordur:
f harfi metni bir f-string yapar.{...} içindeki ifade hesaplanır ve sonucu metnin o noktasına yerleştirilir; str() dönüşümü kendiliğinden olur.{} içine yalnızca değişken adı değil, herhangi bir ifade yazılabilir: aritmetik, karşılaştırma, metot çağrısı.
Uzun ifadeleri önce bir değişkene atamak okunabilirliği artırır; {} içi kısa kalsın.
Değişkenden sonra : ile bir biçim belirteci (format specifier) yazılabilir. .2f → sabit noktalı (f), 2 ondalık basamak.
:.2f mi, round() mu?İkisi de “iki basamak” gösterir ama farklı şeyler yapar. :.2f yalnızca yazımı biçimlendirir, değer değişmez. round() ise yeni bir sayı döndürür.
Ekrana yazdırırken :.2f, değerle hesaplamaya devam edecekseniz round() kullanın.
Tablo gibi hizalı çıktı için genişlik ve hizalama belirteçleri kullanılır. :<10 sola, :>10 sağa, :^10 ortaya hizalar; sayı toplam genişliktir. Belirteçler birleştirilebilir: :>8.2f.
Döngü + f-string ikilisi hizalı çıktı için yeterlidir; ek kütüphane gerekmez.
Sık karşılaşacağınız birkaç belirteç daha:
Binlik ayracı İngilizce kurala göre virgüldür; Türkçe yazım isteniyorsa sonucu .replace(",", ".") ile dönüştürebilirsiniz.
En sinsi hata, f önekini unutmaktır: Python hata vermez, metni olduğu gibi yazar.
{ görüyorsanız önce f önekine bakın.f"{ad:.2f}" bir ValueError verir, çünkü ad bir metindir.upper() ve lower() Türkçe BilmezPython’ın upper()/lower() metotları Unicode kurallarına göre çalışır; Türkçeye özgü yerel ayar (locale) kurallarını uygulamaz. Özellikle I/ı ve İ/i çiftlerinde beklemediğiniz sonuçlar alabilirsiniz.
Bu tür karşılaştırmalarda .lower()’ın her durumda “doğru” sonucu vereceğini varsaymayın; bu sorun ileride tekrar karşımıza çıkacak.
Her hücre için önce çıktıyı tahmin edin, sonra çalıştırıp tahmininizi kontrol edin.
Bir ürünün KDV dâhil tutarını iki ondalık basamakla, Toplam: etiketiyle yazdırın. Sonra fiyatı 399.9, KDV’yi 0.10 yapıp yeniden çalıştırın.
Ek: :.2f’yi silip çalıştırın; farkı açıklayın.
Çözüm
Toplam: {toplam:.2f} TL — :.2f sayıyı iki ondalık basamakla yazar: 250 TL ve %20 için 300.00, 399.9 TL ve %10 için 439.89.300.0 ve 439.89000000000004 gibi değerler görürsünüz. Ondalıklı sayılar bellekte tam olarak tutulamadığı için kuyruktaki o küçük sapma zaten oradadır; :.2f yalnızca yazımı düzenleyip onu gizler, sayının kendisine dokunmaz. Sayıyı gerçekten yuvarlamak isterseniz round() kullanılır.Her soruda önce kendi cevabınızı seçin, sonra cevap anahtarındaki gerekçeleri okuyun; yanlış şıklar bu konuda gerçekten yapılan hatalardan seçildi.
PYTHONPythonpythonNone['Ada', 'Yılmaz', '80', '90']['Ada Yılmaz', 80, 90]Ada Yılmaz 80 90['Ada Yılmaz', '80', '90'][' Ada Yılmaz', '80', '90 \n']Not: {puan:.1f}Not: 87Not: 87.4Not: 87.5Not: 87.456Merhaba Ali!Merhaba {ad}!NameErrorMerhaba ad!SyntaxErrorfloat floatstr strstr floatfloat strint float" Deniz Kaya , 19 , Samsun " biçimindeki bir kayıt satırını alıp Deniz Kaya (19) - Samsun biçiminde yazdıran kodu yazın. Parçalardaki fazla boşlukları temizleyin.
s[i] indeks, s[a:b] dilim.upper() gibi metotlar yeni string döndürür, sonucu atayın.strip() kenar boşluklarını siler, split() parçalara ayırır, join() birleştirir.f"...{ifade}..."; {x:.2f} iki ondalık, {x:>8} sağa hizalı 8 genişlik, {x:,} binlik, {x:.1%} yüzde.:.2f yazımı biçimlendirir, round() yeni sayı döndürür.f unutulursa hata çıkmaz, {ad} olduğu gibi yazılır.lower()/upper() Türkçe I/ı, İ/i kuralını bilmez.strip() + split() ile alanlara ayırır.:.2f ile round() arasındaki farkı örnekle gösterir.lower()’a güvenilemeyecek durumu tanır.İleri Programlama – OMÜ | 🏠