Bir uygulamaya adını yazdığında, bir arama kutusuna kelime girdiğinde ya da bir tweet atarken karakter sayısının azaldığını gördüğünde arka planda hep aynı şey çalışıyor: metin işlemleri. Python’da metne string (kısaca str) deniyor ve bu derste metinleri kesmeyi, bölmeyi, aramayı, değiştirmeyi ve düzgün biçimlendirmeyi öğreneceğiz. Bir de Türkçe yazan herkesin bir gün karşılaşacağı bir tuzağa bakacağız: I ve İ harfleri.
Kodların hepsi Colab’da hazır: Colab’da Aç
Metin bir karakter dizisidir
Python’a göre bir metin, sıraya dizilmiş karakterlerden oluşuyor. Bu yüzden Ders 7’de listelerde öğrendiğin indeksleme ve dilimleme metinlerde de aynen çalışıyor:
s = "Merhaba Dünya"print(len(s)) # 13 (boşluk da bir karakter)print(s[0]) # Mprint(s[-1]) # aprint(s[0:7]) # Merhabaprint(s[::-1]) # aynüD abahreM
Son satırdaki [::-1] metni tersine çeviriyor: baştan sona, -1 adımla, yani geriye doğru.
Metinler değiştirilemez
Listelerden önemli bir farkı var: Bir metnin tek bir karakterini değiştiremezsin.
s[0] = "m"# TypeError: 'str' object does not support item assignment
Bu ders boyunca göreceğin bütün metotlar aslı değiştirmiyor, yeni bir metin döndürüyor. Değişikliği saklamak istiyorsan sonucu bir değişkene atamalısın: s = s.lower().
Büyük-küçük harf ve boşluklar
print(s.upper()) # MERHABA DÜNYAprint(s.lower()) # merhaba dünyaprint("adana kebap".title()) # Adana Kebapprint("ADANA".capitalize()) # Adanaprint(" ayşe ".strip() + "|") # ayşe|
strip() baştaki ve sondaki boşlukları siliyor. Ders 10’daki sayı tahmin oyununda kullanıcı girişini temizlemek için kullanmıştık. Formlardan, dosyalardan gelen metinlerde baştaki ve sondaki boşluklar en sık karşılaşılan sorunlardan biri.
Türkçe karakter tuzağı: I ve İ
Bu bölümü atlama, çünkü Türkçe metinlerle çalışan herkesin başına gelir:
print("istanbul".upper()) # ISTANBUL (İSTANBUL olmalıydı)print("ISPARTA".lower()) # isparta (ısparta olmalıydı)
Python’un upper ve lower metotları İngilizce kurallarını uyguluyor. İngilizcede küçük i’nin büyüğü I, büyük I’nın küçüğü i. Türkçede ise dört ayrı harf var: ı, I, i, İ. Üstelik "İSTANBUL".lower() ekranda “istanbul” gibi görünse de içinde görünmez fazladan bir nokta işareti taşıyor; uzunluğu 8 değil 9 çıkıyor ve “istanbul” ile karşılaştırınca eşit sayılmıyor.
Küçük bir çözüm: dönüşümden önce bu harfleri kendin değiştir.
def tr_lower(metin): return metin.replace("I", "ı").replace("İ", "i").lower()def tr_upper(metin): return metin.replace("i", "İ").replace("ı", "I").upper()print(tr_lower("ISPARTA İZMİR")) # ısparta izmirprint(tr_upper("istanbul ılgaz")) # İSTANBUL ILGAZ
Bir kullanıcı adı araması, bir şehir listesi ya da Türkçe bir metindeki kelimeleri saymak gibi işlerde bu fark sonuçları doğrudan değiştiriyor.
Bölmek ve birleştirmek: split ve join
meyveler = "elma,armut,muz"liste = meyveler.split(",")print(liste) # ['elma', 'armut', 'muz']print(" - ".join(liste)) # elma - armut - muzprint("python veri bilim".split()) # ['python', 'veri', 'bilim']
split bir metni verdiğin ayırıcıdan bölüp liste yapıyor; ayırıcı vermezsen boşluklardan bölüyor. join tam tersini yapıyor: Bir listeyi aradaki metinle birleştiriyor. join‘in yazımı ilk başta ters gelebilir; ayırıcı başta, liste parantezin içinde.
Aramak ve değiştirmek
kelime = "bilgisayar"print(kelime.count("a")) # 2print(kelime.find("say")) # 5 (kaçıncı sırada başlıyor)print(kelime.find("x")) # -1 (bulunamadı)print("say" in kelime) # Trueprint("merhaba".replace("a", "4")) # merh4b4print("ayse@ornek.com".endswith(".com")) # Trueprint("Dr. Can".startswith("Dr.")) # True
Sadece “var mı, yok mu?” diye soruyorsan in en okunaklı yol. Nerede olduğunu da bilmek istiyorsan find.
f-string ile biçimlendirmek
f-string’leri Ders 4’ten ve f-string kod kartından tanıyorsun. Süslü parantezin içine : koyup biçim de verebilirsin:
ad = "zeynep"pi = 3.14159print(f"Merhaba {ad.title()}!") # Merhaba Zeynep!print(f"{pi:.2f}") # 3.14print(f"[{ad:>10}]") # [ zeynep] sağa yaslaprint(f"[{ad:<10}]") # [zeynep ] sola yasla
Mini program: metin analizcisi
Öğrendiklerimizi bir fonksiyonda birleştirelim. Bir metnin karakter sayısını, kelime sayısını, en uzun kelimesini ve en sık geçen kelimesini bulalım:
def metin_analizi(metin): """Bir metnin kelime sayısını, en uzun kelimesini ve en sık geçen kelimesini döndürür.""" kelimeler = [k.strip(".,!?;:").lower() for k in metin.split()] sayac = {} for k in kelimeler: sayac[k] = sayac.get(k, 0) + 1 return { "karakter": len(metin), "kelime": len(kelimeler), "en_uzun": max(kelimeler, key=len), "en_sik": max(sayac, key=sayac.get), }metin = "Python öğrenmek eğlenceli. Python ile veri analizi de eğlenceli!"for ad, deger in metin_analizi(metin).items(): print(f"{ad:<10} {deger}")
karakter 64kelime 9en_uzun eğlencelien_sik python
İlk satırdaki liste üreteci her kelimenin ucundaki noktalama işaretlerini strip ile siliyor ve küçük harfe çeviriyor. Bunu yapmasaydık “eğlenceli.” ile “eğlenceli!” iki farklı kelime sayılırdı. Gerçek veriyle çalışırken metin işleminin büyük kısmı bu tür temizlikten oluşuyor.
İki küçük program daha:
def palindrom_mu(metin): """Boşlukları ve noktalamayı yok sayarak metin tersten de aynı mı diye bakar.""" temiz = "".join(h for h in tr_lower(metin) if h.isalnum()) return temiz == temiz[::-1]print(palindrom_mu("Ey Edip Adanada pide ye")) # Trueprint(palindrom_mu("Python")) # Falsedef maskele(eposta): kullanici, alan = eposta.split("@") return kullanici[0] + "*" * (len(kullanici) - 1) + "@" + alanprint(maskele("ayse.yilmaz@ornek.com")) # a**********@ornek.com
isalnum() bir karakterin harf ya da rakam olup olmadığını söylüyor; boşlukları ve noktalamayı eleyerek sadece harfleri bırakıyoruz. "*" * 10 metni 10 kez tekrarlıyor. E-posta maskeleme, birçok uygulamanın şifre sıfırlama ekranında gördüğün “a***@ornek.com” yazısının basit bir hali.
[AFFILIATE: yeni başlayanlar için Python kitabı ya da kursu]
Alıştırmalar
- Kullanıcının adını ve soyadını ayrı ayrı alıp “Soyad, Ad” biçiminde, soyadı büyük harfle yazdır (örnek:
YILMAZ, Ayşe). Türkçe karakterlere dikkat. - Bir cümledeki sesli harflerin sayısını bulan
sesli_say(cumle)fonksiyonu yaz. "2026-11-04"metninisplitile parçalayıp"04.11.2026"biçimine çevir.- Bir şifrenin en az 8 karakter olduğunu, içinde en az bir rakam ve en az bir büyük harf bulunduğunu kontrol eden
sifre_guclu_mu(sifre)fonksiyonu yaz.
Cevaplar Colab not defterinin sonunda.
Bu derste ne öğrendik?
- Metinler indekslenip dilimlenebilir ama değiştirilemez; metotlar yeni bir metin döndürür.
upper,lower,title,stripile harf ve boşluk düzenlenir.- Türkçede I ve İ için
upperveloweryanlış sonuç verir; dönüşümden önce harfleri kendin değiştir. splitmetni listeye,joinlisteyi metne çevirir.in,find,count,replace,startswith,endswithile arama ve değiştirme yapılır.- f-string’de
:ile biçim verilir:{pi:.2f},{ad:>10}.
Sıradaki ders
Python Dersi 12’de kümeleri ve liste üreteçlerini öğreniyoruz.
Devamını oku
- Kod Kartı: Counter ile Kelime Saymak
- İlk Mini Proje: Sayı Tahmin Oyunu (Python Dersi 10)
- Wordle Çözücü Yazmak: Python ile Kelime Oyununu Yenmek

Bir yanıt yazın