Oluyor.
Koddaki hatalara gelirsek, öncelikle bul fonksiyonunda i değerini print etmeniz gerekiyor. Kelimeniz i değişkeninde saklanıyor çünkü.
ara(kelime, altkelime)
fonksiyonunda da ilk if'in kontrolünü hatalı yapmışsınız.
Yine ara fonksiyonunda returnler hatalı. Eğer bul fonksiyonundaki gibi return'leneni if için kontrol değişkeni olarak alacaksanız illaki bool değişkeni (True veya False) return etmelisiniz.
Son olarak
if r: print(r)
satırının mantığına gelecek olursak, "Eğer
r
değişkeni
True
ise
r
değişkenini ekrana yazdır." demek oluyor. Düzgün çalışmamasının sebebi, r değişkeninin
True
ya da
False
yani bir bool değişkeni olmaması.
Aşağıya çalışan kodu atıyorum. Kodun nasıl çalıştığı hakkındaki açıklamaları kodun içerisinde yaptım.
[CODE lang="python" title="Açıklamalı kod"]
yerleşim_yerleri = ["Kütahya", "İstanbul", "İzmir", "Bolu", "İnebolu", "Çanakkale", "Çan", "Tirebolucuk"]
def ara(kelime, altkelime):
# Eğer altkelime * ile başlıyorsa ve * ile bitmiyorsa:
if altkelime.startswith('*') and not altkelime.endswith('*'):
# Hem kelimeyi hem de altkelimeyi küçük harfe dönüştür
kucuk_kelime = kelime.lower()
kucuk_altkelime = altkelime.lower()
# Eğer kelime, altkelime ile bitiyorsa:
# (altkelimenin ilk karakterini yani * karakterini almıyoruz [1:] diyerek.)
if kucuk_kelime.endswith(kucuk_altkelime[1:]):
# Bir boolean değişkeni olan True döndürüyoruz ki if içinde kullanabilelim
return True
else:
# Yukarıdaki durum tutmuyorsa False döndürüyoruz
return False
# Eğer altkelime * ile ham başlıyor hem bitiyorsa:
elif altkelime.startswith('*') and altkelime.endswith('*'):
# Kelime değişkenini küçük harf yapıyoruz
kucuk_kelime = kelime.lower()
#altkelime değişkeninden * karakterlerini siliyoruz ve sonra küçük harf yapıyoruz
kucuk_altkelime = altkelime.replace('*', '').lower()
#Eğer altkelime, kelimenin içinde varsa veya altkelime kelime ile aynıysa:
if kucuk_altkelime in kelime or kucuk_altkelime == kucuk_kelime:
# Bir boolean değişkeni olan True döndürüyoruz ki if içinde kullanabilelim
return True
else:
# Yukarıdaki durum tutmuyorsa False döndürüyoruz
return False
def bul(altkelime):
# yerleşim_yerleri değişkeni içerisindeki her eleman için
for i in yerleşim_yerleri:
# ara fonksiyonunun döndürdüğü değeri r değişenine kaydediyoruz.
# r değişkeni bu durumda bir boolean olduğu için if'in içinde kullanabiliriz.
r = ara(i, altkelime)
# Eğer r değişkeni True ise i değişkenini yani kelimeyi printliyoruz.
if r: print(i)
# Fonksiyonları çağırıyoruz.
bul('*bolu*')
print('------------------------')
bul('*bolu')
[/CODE]
Çıktısı bu şekilde: