aşağıda girdiğim kodlarda tanımladığım yerlesimYerleri listesinden *bolu* olarak arama yaptırdığımda hiçbir çıktı alamıyorum. Yanlışım nerede. Yardımcı olursanız sevinirim.
def ara(kelime,altkelime):
if altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.startswith(altkelime[:-1].lower()):
return kelime
elif altkelime[0]=='*' and altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.find(altkelime[1:-1].lower()):
return kelime
elif altkelime[0]=='*':
kucuk=kelime.lower()
if kucuk.endswith(altkelime[1:].lower()):
return kelime
else:
if kelime==altkelime:
return kelime
def bul(altkelime):
for u in yerlesimYerleri:
r=ara(u,altkelime)
if r:
print\(r\)
aranacakKelime=input('Aramak istediğimiz yerleşim Yeri:')
bul(aranacakKelime)
09:23:57 1 aib@apollon:/tmp% python3 a.py
Aramak istediğimiz yerleşim Yeri:bolu
Traceback (most recent call last):
File "a.py", line 25, in <module>
bul(aranacakKelime)
File "a.py", line 20, in bul
for u in yerlesimYerleri:
NameError: name 'yerlesimYerleri' is not defined
Kodu eksik yazmışım. Tam kodlar aşağıdaki gibidir.
yerlesimYerleri=['Bolu','Yozgat','inebolu','Manavgat','Çanakkale','Çan','Kırıkkale','Tirebolucuk']
def ara(kelime,altkelime):
if altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.startswith(altkelime[:-1].lower()):
return kelime
elif altkelime[0]=='*' and altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.find(altkelime[1:-1].lower()):
return kelime
elif altkelime[0]=='*':
kucuk=kelime.lower()
if kucuk.endswith(altkelime[1:].lower()):
return kelime
else:
if kelime==altkelime:
return kelime
def bul(altkelime):
for u in yerlesimYerleri:
r=ara(u,altkelime)
if r:
print(r)
aranacakKelime=input('Aramak istediğimiz yerleşim Yeri:')
bul(aranacakKelime)
Oncealtkelime* ile bitiyor mu diye bakiyor, sonra altkelime* ile basliyor ve* ile bitiyor mu diye bakiyor. Ilk elif'e dusmesi icin altkelimenin * ile bitmemesi lazim, kendisi de tam olarak bunu test ettigi icin ilk elif asla calismiyor.
Bu arada:
Kendi ve sana yardim etmeye calisan insanlarin isini kolaylastirmak adina su sekilde test case’leri yazmanda fayda var:
ara fonksiyonunun da ismi ve dondurdugu deger yanlis sanki; iki kelime eslestirdigi icin eslestir adini verip, durumda gore True veya False dondururdum ben olsam.
Kodları aşağıdaki gibi düzenleyince sorun çözüldü. @aib acemiyim henüz Mustafa Başer’in Python kitabından çalışıyorum bölüm bölüm sırayla gidiyorum yanlış ve eksiklerim için kusura bakma.
def ara(kelime,altkelime):
if altkelime[0]=='*' and altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.find(altkelime[1:-1].lower()) :
return kelime
elif altkelime[-1]=='*':
kucuk=kelime.lower()
if kucuk.startswith(altkelime[:-1].lower()):
return kelime
elif altkelime[0]=='*':
kucuk=kelime.lower()
if kucuk.endswith(altkelime[1:].lower()):
return kelime
else:
if kelime==altkelime:
return kelime
def bul(altkelime):
for u in yerlesimYerleri:
r=ara(u,altkelime)
if r:
print(r)
aranacakKelime=input('Aramak istediğimiz yerleşim Yeri:')
bul(aranacakKelime)