Nesne Tabanlı Programlama

4 - Metinlerle Çalışmak: String İşlemleri

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2024

Stringler (Metinler)

  • Karakterlerden oluşan dizilerdir.
  • Tek tırnak (') veya çift tırnak (") içinde tanımlanırlar.
mesaj = "Merhaba Dünya!"
ad = 'Ahmet'

Çok Satırlı Stringler

  • Üç tırnak (''' veya """) ile tanımlanır.
  • Birden fazla satıra yayılabilirler.
uzun_metin = """Bu çok satırlı bir
metindir. Birden fazla
satıra yazılabilir."""

String İndeksleme (Indexing) ve Dilimleme (Slicing)

İndeksleme (Indexing)

  • Stringlerdeki karakterlere, indekslerini kullanarak erişebiliriz.
  • Yani bir stringin her bir karakteri bir indekse sahiptir.
  • İndeksler 0’dan başlar.
  • Negatif indeksleme ile stringlere sondan başlayarak erişebiliriz.
mesaj = "Python"
print(mesaj[0])    # Çıktı: P
print(mesaj[1])    # Çıktı: y
print(mesaj[-1])   # Çıktı: n

Dilimleme (Slicing)

  • Dilimleme, bir stringin belirli bir aralığını almak için kullanılır.
  • [başlangıç_indeksi:bitiş_indeksi] şeklinde kullanılır.
  • Başlangıç indeksi dahil, bitiş indeksi hariç alınır.
mesaj = "Python"
print(mesaj[2:5])  # Çıktı: tho
print(mesaj[:4])   # Çıktı: Pyth
print(mesaj[3:])   # Çıktı: hon

Uyarı

Eğer stringin uzunluğundan büyük veya eşit bir indeks kullanırsanız, Python IndexError hatası verecektir.

message = "Merhaba"
print(message[7])
IndexError: string index out of range

String Metotları

  • Stringler üzerinde çeşitli işlemler yapmak için kullanabileceğimiz fonksiyonlardır.
  • .metod_adi() şeklinde kullanılırlar.

upper() ve lower() Metotları

  • upper(): String’i büyük harfe dönüştürür.
  • lower(): String’i küçük harfe dönüştürür.
metin = "Merhaba Dünya!"
buyuk_metin = metin.upper()
kucuk_metin = metin.lower()

print(buyuk_metin)  # Çıktı: MERHABA DÜNYA!
print(kucuk_metin)  # Çıktı: merhaba dünya!

isim = "aHMeT"
print(isim.upper()) # Çıktı: AHMET
print(isim.lower()) # Çıktı: ahmet

capitalize() ve title() Metotları

  • capitalize(): String’in sadece ilk harfini büyük yapar.
  • title(): String’deki her kelimenin ilk harfini büyük yapar.
metin1 = "merhaba dünya"
metin2 = "python programlama dili"

print(metin1.capitalize())  # Çıktı: Merhaba dünya
print(metin2.title())       # Çıktı: Python Programlama Dili

strip(), lstrip() ve rstrip() Metotları

  • String’in başındaki ve/veya sonundaki boşlukları siler.
metin = "   Merhaba   "
temiz_metin = metin.strip()
print(temiz_metin)  # Çıktı: Merhaba

metin3 = "   Python   "
print(metin3.lstrip()) # Çıktı: Python
print(metin3.rstrip()) # Çıktı:    Python

replace() Metodu

  • Bir stringdeki belirli bir alt stringi başka bir alt string ile değiştirir.
metin = "Merhaba Dünya!"
yeni_metin = metin.replace("Dünya", "Python")
print(yeni_metin)  # Çıktı: Merhaba Python!

metin = "Bu bir deneme metnidir."
print(metin.replace(" ", "_")) # Çıktı: Bu_bir_deneme_metnidir.

split() Metodu

  • Bir stringi belirli bir ayraç karakterine göre böler ve bir liste döndürür.
metin = "Elma,Armut,Muz"
meyveler = metin.split(",")
print(meyveler)  # Çıktı: ['Elma', 'Armut', 'Muz']

url = "https://www.google.com"
print(url.split(".")) # Çıktı: ['https://www', 'google', 'com']

startswith() ve endswith() Metotları

  • Bir stringin belirli bir alt string ile başlayıp başlamadığını veya bitip bitmediğini kontrol eder.
metin = "Merhaba Dünya!"

print(metin.startswith("Mer"))  # Çıktı: True
print(metin.endswith("!"))    # Çıktı: True

dosya_adi = "rapor.pdf"
print(dosya_adi.endswith(".pdf")) # Çıktı: True

find() ve index() Metotları

  • Bir string içinde belirli bir alt string arar.
  • find(): Alt string bulunursa indeksini, bulunmazsa -1 döndürür.
  • index(): Alt string bulunursa indeksini, bulunmazsa ValueError hatası verir.
metin = "Merhaba Dünya!"

print(metin.find("Dünya"))  # Çıktı: 8
print(metin.find("Python"))  # Çıktı: -1

email = "[email protected]"
print(email.find("@")) # Çıktı: 5
metin = "Merhaba Dünya!"

print(metin.index("Dünya"))  # Çıktı: 8
# print(metin.index("Python"))  # ValueError: substring not found

count() Metodu

  • Bir string içinde belirli bir alt stringin kaç kez geçtiğini sayar.
  • Eğer alt string bulunmazsa 0 döndürür.
metin = "Merhaba Dünya!"

print(metin.count("a"))  # Çıktı: 3

in ve not in Operatörleri

  • Bir stringin başka bir string içinde olup olmadığını kontrol eder.
metin = "Merhaba Dünya!"

print("Merhaba" in metin)  # Çıktı: True
print("Python" in metin)  # Çıktı: False

print("Dünya" not in metin) # Çıktı: False

len() Metodu

  • Stringin uzunluğunu (karakter sayısını) döndürür.
metin = "Merhaba Dünya!"
uzunluk = len(metin)
print(uzunluk) # Çıktı: 14

isim = "Emre"
print(len(isim)) # Çıktı: 4

String Metotlarının Zincirlenmesi (Method Chaining)

  • Birçok string metodunu art arda çağırarak, string üzerinde birden fazla işlem yapabiliriz.
  • Her metot, bir önceki metodun sonucunu alır ve işler.
metin = "   PYTHON PROGRAMLAMA   "
yeni_metin = metin.strip().lower().replace(" ", "_")
print(yeni_metin)  # Çıktı: python_programlama

String Formatlama

  • Stringler içine değişkenlerin değerlerini veya diğer ifadelerin sonuçlarını eklemek için kullanılır.

% Operatörü ile Formatlama

  • Bu yöntem, C dilindeki printf() fonksiyonuna benzer. % operatörü, string içinde yer tutucu olarak kullanılır ve ardından değişkenlerin değerleri veya diğer ifadeler gelir.
isim = "Ahmet"
yas = 30
mesaj = "Benim adım %s ve yaşım %d." % (isim, yas)
print(mesaj)  # Çıktı: Benim adım Ahmet ve yaşım 30.

fiyat = 19.99
print("Ürünün fiyatı: %.2f TL" % fiyat) # Çıktı: Ürünün fiyatı: 19.99 TL

Yer tutucu türleri

  • %s: String (metin) değerleri için kullanılır.
  • %d: Integer (tam sayı) değerleri için kullanılır.
  • %f: Float (ondalıklı sayı) değerleri için kullanılır.
  • %c: Karakter değerleri için kullanılır.
  • %x: Sayının hexadecimal (onaltılık) gösterimini ekler.
  • %o: Sayının octal (sekizlik) gösterimini ekler.

Örnek

name = "Ahmet"
age = 30
height = 1.85
exam_result = 85
pi = 3.14159265359

mesaj1 = "Benim adım %s ve yaşım %d." % (name, age)
print(mesaj1)  # Çıktı: Benim adım Ahmet ve yaşım 30.

mesaj2 = "Boyum %.1f metre." % height
print(mesaj2)  # Çıktı: Boyum 1.9 metre.

mesaj3 = "Pi sayısı: %.2f" % pi
print(mesaj3)  # Çıktı: Pi sayısı: 3.14

mesaj4 = "Sınav notum %d." % exam_result
print(mesaj4)  # Çıktı: Sınav notum 85.

mesaj5 = "Hexadecimal: %x, Octal: %o" % (exam_result, exam_result)
print(mesaj5)  # Çıktı: Hexadecimal: 55, Octal: 125

format() Metodu ile Formatlama

.format() metodu, string içinde süslü parantezler ({}) kullanarak yer tutucular oluşturur ve ardından bu yer tutuculara karşılık gelen değerler .format() metoduna argüman olarak verilir.

Örnek

isim = "Ahmet"
yas = 30
mesaj = "Benim adım {} ve yaşım {}.".format(isim, yas)
print(mesaj)  # Çıktı: Benim adım Ahmet ve yaşım 30.

sayi = 123
print("{:05d}".format(sayi)) # Çıktı: 00123

.format() metodunda index numaralarını kullanma

  • İndeks Numaraları: Yer tutuculara indeks numaraları atayarak argümanların sırasını değiştirebilirsiniz.
print("{1} {0}".format("dünya", "Merhaba"))

.format() metodunda parametre isimlerini kullanma

Parametreleri isimleriyle kullanarak daha okunabilir kod yazabilirsiniz.

print("Adım {ad}, yaşım {yas}.".format(ad="Ahmet", yas=30))

f-Stringler (Python 3.6 ve Sonrası)

  • f-Stringler, string formatlamanın en yeni ve en okunabilir yöntemidir.
  • Stringin başına f harfi eklenir ve süslü parantezler ({}) içine doğrudan değişkenlerin veya diğer ifadelerin adları yazılır.
isim = "Ahmet"
yas = 30
mesaj = f"Benim adım {isim} ve yaşım {yas}."
print(mesaj)  # Çıktı: Benim adım Ahmet ve yaşım 30.

deger = 10/3
print(f"Sonuç: {deger:.2f}") # Çıktı: Sonuç: 3.33

Escape Karakterleri

  • Özel karakterleri string içinde kullanmak için kullanılırlar.
  • Örneğin: \n (yeni satır), \t (tab), \" (çift tırnak), \' (tek tırnak), \\ (ters bölü)
metin1 = "Bu metin\nbirden fazla\nsatıra yayılacak."
print(metin1)

metin2 = "Dosya yolu: C:\\Users\\Belgelerim"
print(metin2)

metin3 = "Bu bir \"örnek\" metindir."
print(metin3)

Stringlerin Değiştirilemezliği (Immutability)

  • Stringler değiştirilemez (immutable) veri tipleridir.
  • Bir string oluşturulduktan sonra, karakterleri değiştirilemez.
metin = "Merhaba"
# metin[0] = "m"  # TypeError: 'str' object does not support item assignment

Quiz

  1. Aşağıdaki kod bloğunun çıktısı nedir?
mesaj = "  Python Programlama  "
print(len(mesaj.strip()))
  1. Aşağıdaki kod bloğunun çıktısı nedir?
metin = "merhaba dünya"
print(metin.title())
  1. Aşağıdaki kod bloğunun çıktısı nedir?
message = "Python"

for i in range(len(message)-1, -1, -1):
    print(message[i], end="")
  1. “abracadabra” bloğunda, “a” harfinin kaç kez geçtiğini ekrana yazan kodu yazınız? (İpucu: string methodları)
  1. Kullanıcıdan bir e-posta adresi alarak kullanıcı adını (at işaretinden önceki kısım) ve domain adını (at işaretinden sonraki kısım) ayrı ayrı ekrana yazan kodu oluşturun.
email = input("E-posta adresinizi girin: ")
  1. Kullanıcıdan giriş olarak bir organizasyon adı alarak, verilen ismin kısaltmasını büyük harflerle olacak şekilde oluşturan kodu yazın.

Ör: Birleşmiş Milletler => BM

Alıştırmalar

  1. Kullanıcıdan bir metin girdisi alın ve bu metni büyük harflerle yazdırın.
  2. Kullanıcıdan bir metin girdisi alın ve bu metindeki boşluk sayısını bulun.
  3. “Python Programlama Dili” metnini “python_programlama_dili” şeklinde yazdırın.
  4. “Elma, Armut, Muz” metnini virgüle göre ayırın ve her meyveyi ayrı bir satırda yazdırın.
  5. Kullanıcıdan bir metin girdisi alın ve bu metnin palindrom olup olmadığını kontrol edin. (Palindrom, tersten okunduğunda da aynı olan metinlerdir.)
  6. “Bilgisayar Bilimleri” metninin ilk 4 karakterini ve son 5 karakterini alarak yeni bir string oluşturun ve yazdırın.

Özet

Bu derste şunları öğrendik:

  • Stringlerin tanımı ve oluşturulması
  • Çok satırlı stringler
  • String indeksleme ve dilimleme
  • Yaygın string metotları
  • String formatlama yöntemleri: % operatörü, .format() metodu, f-stringler
  • Escape karakterleri
  • Stringlerin değiştirilemezliği (Immutability)
  • String metotlarının zincirlenmesi (Method Chaining)

Gelecek Hafta

  • Listeler
  • Sözlükler
  • Demetler
  • Kümeler