Ayberk Seven

Ana Dal: Bilgisayar Mühendisliği

Yan Dal: Mekatronik Mühendisliği

Ayberk Seven

Ana Dal: Bilgisayar Mühendisliği

Yan Dal: Mekatronik Mühendisliği

Blog Yazılarım

Python’da Metinler – Karakter Dizileri

Bu konu da Python’da metinler(karakter dizileri) ile nasıl çalışacağımızdan bahsedeceğiz. Adı üzerinde Python’da metinler karakterlerden oluşan bir liste gibi davranır. Bu nedenle listelerde kullandığınız tüm yöntem ve metodları metinler üzerinde de kullanabilirsiniz.

Öncelikle; metinlerin çift tırnak ya da tek tırnak işareti ile oluşturulduğunu veri türleri konusundan hatırlıyorsunuzdur. Birden çok satıra sahip olan bir paragrafı ise üç adet tek ya da çift tırnak işaretleri arasında yazarak bir değişken içinde depolamak mümkündür;

paragraf="""Öncelikle; metinlerin çift tırnak ya da tek tırnak işareti ile oluşturulduğunu, veri türleri konusundan hatırlıyorsunuzdur. 

Birden çok satıra sahip olan bir paragrafı ise üç çift tırnak işaretleri arasında yazarak bir değişken içinde depolamak mümkündür..."""
print(paragraf)

Çıktı:

Öncelikle; metinlerin çift tırnak ya da tek tırnak işareti ile oluşturulduğunu, veri türleri
konusundan hatırlıyorsunuzdur.

Birden çok satıra sahip olan bir paragrafı ise üç çift tırnak işaretleri arasında yazarak bir değişken içinde
depolamak mümkündür...

Metinler, listeler gibi davrandığı için, metin içindeki karakterlere listelerdeki verilere erişir gibi erişebilirsiniz;

paragraf[2]
paragraf[:14]
paragraf[23:45]

Metin uzunluğunu len() metoduyla öğrenebilirsiniz. yalnız boşlukların da birer karakter olarak hesaplandığını unutmayınız.

len(paragraf)

Döngüler ile her bir karaktere tek tek işlem uygulayabilirsiniz;

for x in paragraf:
print(x)

Belirli bir kelime ya da metin parçasının metin içinde yer alıp almadığını if..in koşullu ifadesiyle öğrenebilirsiniz;

if "veri türleri" in paragraf:
  print("'veri türleri' ifadesi metin içinde yer alıyor!")

# Aynı ifadenin kısa kullanımı
print("değişken" in paragraf)

Çıktı:

'veri türleri' ifadesi metin içinde yer alıyor!

True

Bu metod ve ifadeler daha önce öğrendiğimiz listeler ile gerçekleştirdiğimiz işlemlerin aynısı olduğu için üzerinde çok fazla durup, örnekleri çeşitlendirmeyeceğim. Listelerde öğrendiğiniz tüm özellikleri metinler üzerinde deneyip nasıl çalıştığını deneyimleyebilirsiniz. Bunu da özellikle tavsiye ederim. Çünkü öğrenmeyi pekiştirmek kendin yapmaktan geçer. Kendi uyguladığınızı unutmazsınız. Ya da biliyorum sandığınız ama kendiniz yapmadığınız için ne tür hatalar yapabileceğinizi bilmediğiniz pek çok bilgiyi ancak uygulama ile pekiştirebilirsiniz. Konuları çok iyi anlamış olsanız ve basit buluyor dahi olsanız da örnekleri siz de kendiniz yazmaya ve çeşitlendirip başka örnekler oluşturmaya özen gösteriniz. Uzman dahi olsanız, çoğu uygulamanın bir değişkeni hatalı tanımladığınız ve hatta bir virgül ya da iki noktayı yazmayı unuttuğunuz için hata verdiğini göreceksiniz. En iyi kodlama öğrenme yöntemi kendi kodunu yazmaktır!

Şimdi metinlere özgü metodlara göz atalım.

Metin içindeki harfleri büyük harfe çevirmek için upper() küçük harfe çevirmek için lower() metodlarından yararlanabilirsiniz. Bu basit işlem ileride kod yazarken pek çok konuda önem arz edecektir.

paragraf.upper()
paragraf.lower()

Metindeki her kelimenin ilk harfini büyük yapmak için title(), paragrafların ilk harfini büyük yapmak için de capitalize() metodlarını kullanarak metinlerinizi biçimlendirebilirsiniz;

paragraf.title()
paragraf.capitalize()

Eğer metin başlangıcında ya da sonunda boşluklar yer alıyorsa bu boşlukları strip() metodu ile kaldırabilirsiniz. lstrip() sadece metin başındaki boşlukları, rstrip() metin sonundaki boşlukları kaldırmanızı sağlar;

ad="  Oben  "
print(ad)
print("ad değişkeni 4 harften oluşmasına rağmen boyutu: ", len(ad))
print("")
soldakiBosluguSilince=ad.lstrip()
print(soldakiBosluguSilince)
print("ad değişkeninden soldaki boşlukları silince boyutu: ", len(soldakiBosluguSilince))
print("")
sagdakiBosluguSilince=ad.rstrip()
print(sagdakiBosluguSilince)
print("ad değişkeninden sağdaki boşlukları silince boyutu: ", len(sagdakiBosluguSilince))
print("")
bosluklariSilince=ad.strip()
print(bosluklariSilince)
print("ad değişkeninden her iki taraftaki boşlukları silince boyutu: ", len(bosluklariSilince))
print("")

Çıktı:

    Oben 
ad değişkeni 4 harften oluşmasına rağmen boyutu: 8

Oben 
ad değişkeninden soldaki boşlukları silince boyutu: 6

    Oben
ad değişkeninden sağdaki boşlukları silince boyutu: 6

Oben
ad değişkeninden her iki taraftaki boşlukları silince boyutu: 4

Metin içindeki bir karakteri değiştirmek için replace() metodunu kullanabilirsiniz;

adres="www.websitesi.com"
adres=adres.replace("com","net")
print(adres)

Çıktı:

www.websitesi.net

Metinleri belirli ayraçlar ile parçalayarak bir listeye kaydetmek için split() metodunu kullanabilirsiniz. Eğer ayraç belirtmezseniz metni varsayılan olarak boşluklara göre parçalayacaktır.

kelimeler=paragraf.split()
print(kelimeler)
print("")
adresinParcalari=adres.split(".")
print(adresinParcalari)

Çıktı:

['Öncelikle;', 'metinlerin', 'çift', 'tırnak', 'ya', 'da', 'tek', 'tırnak', 'işareti', 'ile', 'oluşturulduğunu,', 'veri', 'türleri', 'konusundan', 'hatırlıyorsunuzdur.', 'Birden', 'çok', 'satıra', 'sahip', 'olan', 'bir', 'paragrafı', 'ise', 'üç', 'çift', 'tırnak', 'işaretleri', 'arasında', 'yazarak', 'bir', 'değişken', 'içinde', 'depolamak', 'mümkündür...']

['www', 'websitesi', 'net']

Metinleri birleştirmek için ise, bildiğiniz matematiksel + operatörü kullanılır. Dikkat etmeniz gereken nokta bu operatörle birleştirilen metinler arasında boşluk olmayacağıdır. O nedenle iki kelimeyi birleştirirken aralarına boşluk karakterini de yerleştirmelisiniz.

ad="Oben"
soyad="Seven"
print(ad + " " + soyad)
# Metinler ile değişkenleri ya da liste verilerini de + operatörü ile birleştirebilirsiniz.
print(adresinParcalari[0]+"."+adresinParcalari[1]+"."+adresinParcalari[2])

Çıktı:

Oben Seven
www.websitesi.net

Ancak bir metin ile sayısal değeri birleştirmek mümkün değildir.

deneyim=18
print(ad + deneyim)

kodunu çalıştırdığınızda, “TypeError: can only concatenate str (not “int”) to str” hatasını alırsınız ve açıkça size rakam ile metni birleştiremeyeceğinizi ifade eder.

Peki uygulamalarınızda bunu kullanmanız gereken durumlarda ne yapmalısınız?

Çözümlerden birini muhtemelen siz de önceki konulardan hatırlayarak bulmuşsunuzdur; tür dönüşümü. Yani sayısal değeri çıktı olarak kullanırken metne çevirmek;

deneyim=18
print(ad + " " + soyad + " - Deneyim: " + str(deneyim) + " yıl")

Çıktı:

Oben Seven- Deneyim: 18 yıl

Bir diğer yöntem ise, metin formatlamayı sağlayan format() metodunu kullanmaktır. format() metodu ile değişkenler içinde depolanan veri alınır ve süslü parantezler ile belirlenmiş yer tutucuların bulunduğu konuma yerleştirilir. Bu şekilde istenilen formattaki veri metin içine yerleştirilebilir.

ad="Oben"
soyad="Seven"
deneyim=18
metin= ad + " " + soyad + " - Deneyim: {} yıl"
print(metin.format(deneyim))
# Bir başka yazım şekli
print(ad + " " + soyad + (" - Deneyim: {} yıl").format(deneyim))

Çıktı:

Oben Seven - Deneyim: 18 yıl
Oben Seven - Deneyim: 18 yıl

format() metodu sınırsız sayıda parametre alabilir ve bunlara karşılık gelen konumlardaki yer tutucuları içine veri yerleştirebilir;

urunAd="Samsung Galaxy Note 10"
urunMiktar=2
urunFiyat=15000
mesaj="Ön sipariş vermiş olduğunuz {} cihazınızı {} adet için {}-TL. ödeyerek mağazamızdan teslim alabilirsiniz"
print(mesaj.format(urunAd,urunMiktar,urunFiyat))

Çıktı:

Ön sipariş vermiş olduğunuz Samsung Galaxy Note 10 cihazınızı 2 adet için 15000-TL.
ödeyerek mağazamızdan teslim alabilirsiniz

Eğer birden çok değişkeni metnin farklı yerlerine yerleştirmeniz gerekiyorsa sırayı takip etmek yerine verinin sıra numarasını kullanarak yer tutucuları işaretleyip, hangi yer tutucu içinde hangi sıradaki verinin gösterileceğini belirleyebilirsiniz;

urunAd="Samsung Galaxy Note 10"
urunMiktar=2
urunFiyat=15000
mesaj="Ön sipariş vermiş olduğunuz {1} adet {0} cihazınızı {2}-TL. ödeyerek mağazamızdan teslim alabilirsiniz"
print(mesaj.format(urunAd,urunMiktar,urunFiyat))

Çıktı:

Ön sipariş vermiş olduğunuz 2 adet Samsung Galaxy Note 10 cihazınızı 15000-TL.
ödeyerek mağazamızdan teslim alabilirsiniz

Bunların yanı sıra değişken veriler direkt değişkenlerden değil de, listeler ya da sözlüklerden alınıyor olabilir. Web uygulamalarında bu kullanım şekline özellikle çok rastlarız. Görüntülenecek mesaj aynıdır, fakat veritabanından sözlük formatında ya da API’den JSON formatında alınan veriler ile mesaj doldurularak kullanıcıya gösterilir.

siparis={"urunAd":"Samsung Galaxy Note 10","urunMiktar":2,"urunFiyat":15000}
mesaj="Ön sipariş vermiş olduğunuz {} adet {} cihazınızı {}-TL. ödeyerek mağazamızdan teslim alabilirsiniz"
print(mesaj.format(siparis["urunMiktar"],siparis["urunAd"],siparis["urunFiyat"]))

Çıktı:

Ön sipariş vermiş olduğunuz 2 adet Samsung Galaxy Note 10 cihazınızı 15000-TL.
ödeyerek mağazamızdan teslim alabilirsiniz