Çözüldü Python kodun sorunu nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Mstafa123131

Femtopat
Katılım
27 Kasım 2020
Mesajlar
23
Daha fazla  
Cinsiyet
Erkek
[CODE lang="python" title="kod"]yerleşim_yerleri = ["Kütahya", "Istanbul", "Izmir", "Bolu", "Inebolu", "Çanakkale", "Çan", "Tirebolucuk"]

def ara(kelime, altkelime):

if altkelime[-1] == "*":

kucuk = kelime.lower()

if kucuk.startswith(altkelime[:-1].lower()):
return kelime

else:
if kelime == altkelime:
return kelime

def bul(altkelime):
for i in yerleşim_yerleri:
r = ara(i, altkelime)
if r: print(r) [/CODE]

Benden istenen bu koda *bolu şeklinde aranması durumunda hem hem Bolu'nun hem de Inebolu'nun bastırılması. "*bolu*" şeklinde aranması durumunda ise Bolu, Inebolu ve Tirebolucuk'un bastırılmasıydı ben kodum ve sonucum şöyle:

Python:
def ara(kelime, altkelime):
   
    if altkelime[-1] == "*":
       
        kucuk = kelime.lower()
   
        if kucuk.startswith(altkelime[:-1].lower()):
            return kelime  
       
        elif kucuk.endswith(altkelime[:1].lower()):
            return kelime
       
    if altkelime[0] == "*" and altkelime[-1] == "*":
       
        kelimenin_yeri = kelime.find(altkelime)
       

           
        if kelime[kelimenin_yeri:len(altkelime)] == altkelime:
            return kelime
           
       
    else:
        if kelime == altkelime:
            return kelime
           
def bul(altkelime):
    for i in yerleşim_yerleri:
       
        r = ara(i, altkelime)
        if r: print(r)
           
print(bul("bolu*"))
print("*bolu*")
print("kale*")

Kod:
Bolu
Bolucuk
None
None
None
Kodun düzgün çalışması için neleri değiştirmem gerek ve if r: print(r)'nin mantığı nedir? Direkt print(r) yazınca neden doğru olmuyor?

Şimdiden teşekkürler.
 
Çözüm
böyle yan yana olmaz
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:
1621515147357.png
böyle yan yana olmaz
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:
1621515147357.png
 
Çözüm
Çok teşekkür ederim sayenizde anladım. Peki siz ne kadar sürede bu seviyeye geldiniz? Düzenli olarak her gün birkaç saat python çalışmaya başladım da ne zaman bu gibi kodları hiç zorlanmadan yazmaya başlarım?
 
Açıkçası ben bir üniversite öğrencisiyim. Programlama işinin okuduğum bölümle zerre alakası yok ve bunu tamamen hobi olarak yapıyorum. Daha önce hiç para da kazanmadım. Bildiğim ve bir şeyler yazabildiğim tek programlama dili Python, çok az da C biliyorum. Ne kadar çalıştığıma gelirsek, tamamen hobi amaçlı yaptığım için hiçbir zaman kendime hedef koyarak çalışmadım. Okuldan kalan boş zamanlarımda bakındım. Zaten çok da ileri seviye bildiğim söylenemez. Eğer işi profesyonel olarak yapmayı düşünüyorsanız daha bilgili birine sormanızı tavsiye ederim.

Eğer sorunuz çözüldüyse, cevabımı çözüm olarak işaretlemeniz beni çok mutlu eder.

Edit: Ben yaklaşık 2 senedir kendi çabamla öğrenmeye çalışıyorum ama çok kesik kesik ilerliyorum.
 
Çok teşekkür ederim sayenizde anladım. Peki siz ne kadar sürede bu seviyeye geldiniz? Düzenli olarak her gün birkaç saat python çalışmaya başladım da ne zaman bu gibi kodları hiç zorlanmadan yazmaya başlarım?
Başkalarının yaptığı kodları incele ve kendinde onların kopyalarini yazmaya çalış. Kendiliğinden mantığı çözüyorsun. Birde koddaki hatayı bulamayınca kodun tek tek adımını sesli sesli konuşarak ne yapacağını kendi kendine konuş. Böylece hatanın nerde olacağını bulabiliyorsun.
 
Başkalarının yaptığı kodları incele ve kendinde onların kopyalarini yazmaya çalış. Kendiliğinden mantığı çözüyorsun. Birde koddaki hatayı bulamayınca kodun tek tek adımını sesli sesli konuşarak ne yapacağını kendi kendine konuş. Böylece hatanın nerde olacağını bulabiliyorsun.
Evet haklısınız. Cevap basit aslında.
Açıkçası ben bir üniversite öğrencisiyim. Programlama işinin okuduğum bölümle zerre alakası yok ve bunu tamamen hobi olarak yapıyorum. Daha önce hiç para da kazanmadım. Bildiğim ve bir şeyler yazabildiğim tek programlama dili Python, çok az da C biliyorum. Ne kadar çalıştığıma gelirsek, tamamen hobi amaçlı yaptığım için hiçbir zaman kendime hedef koyarak çalışmadım. Okuldan kalan boş zamanlarımda bakındım. Zaten çok da ileri seviye bildiğim söylenemez. Eğer işi profesyonel olarak yapmayı düşünüyorsanız daha bilgili birine sormanızı tavsiye ederim.

Eğer sorunuz çözüldüyse, cevabımı çözüm olarak işaretlemeniz beni çok mutlu eder.

Edit: Ben yaklaşık 2 senedir kendi çabamla öğrenmeye çalışıyorum ama çok kesik kesik ilerliyorum.
Yardımlarınız için teşekkür ederim. Ben de kesik kesik ilerliyorum ve bu bana çok şey kaybettirdi... Artık toparlayacağım ama...
 

Geri
Yukarı