Python fonksiyonlarda undefined variable hatası alıyorum lütfen yardımcı olurmusunuz?

Arkadaşlar aranıza yeni katıldım python camiasına da daha dün katıldım ve fonksiyonlarla alakalı bir problemim var yardımcı olursanız çok sevinirim.

def bedenKutleEndeksiHesapla(kutle,boy):
    bedenKutleEndeksiHesabi = kutle/pow(boy,2)
    return bedenKutleEndeksiHesabi

def bedenKutleEndeksiHesabiSiniflandirma(kutle,boy):
    if bedenKutleEndeksiHesapla(kutle,boy) < 18.5:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve zayıfsınız.')
    elif bedenKutleEndeksiHesapla(kutle,boy) > 18.5 and bedenKutleEndeksiHesapla(kutle,boy) < 24.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve normalsiniz.')
    elif bedenKutleEndeksiHesapla(kutle,boy) > 25 and bedenKutleEndeksiHesapla(kutle,boy) < 29.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve fazla kilolusunuz.')
    elif bedenKutleEndeksiHesapla(kutle,boy) > 30 and bedenKutleEndeksiHesapla(kutle,boy) < 39.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve şişmansınız.')
    else:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve obezsiniz acil hastaneye gidin.')

kisiKutlesi = int(input('Lütfen kilonuzu girin:'))
kisiBoy = int(input('Lütfen boyunuzu girin.'))

bedenKutleEndeksiHesabiSiniflandirma(kisiKutlesi,kisiBoy)

Sorun yaşadığım kısımlar ise print ile başlayan kısımlar:

#def bedenKutleEndeksiHesabiSiniflandirma(kutle,boy):
  #  if bedenKutleEndeksiHesapla(kutle,boy) < 18.5:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve zayıfsınız.')
  #   elif bedenKutleEndeksiHesapla(kutle,boy) > 18.5 and bedenKutleEndeksiHesapla(kutle,boy) < 24.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve normalsiniz.')
  #  elif bedenKutleEndeksiHesapla(kutle,boy) > 25 and bedenKutleEndeksiHesapla(kutle,boy) < 29.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve fazla kilolusunuz.')
  #  elif bedenKutleEndeksiHesapla(kutle,boy) > 30 and bedenKutleEndeksiHesapla(kutle,boy) < 39.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve şişmansınız.')
   # else:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve obezsiniz acil hastaneye gidin.')

almış olduğum hata undefined variable hatası hatanın ne olduğunu biliyorum tanımlanmamış değişken hatası diyor bu problemi nasıl çözebilirim yardımcı olursanız çok sevinirim.Teşekkürler.

Merhaba, kodlarınızı şu şekilde değiştirirseniz sorun çözülür.

def bedenKutleEndeksiHesapla(kutle,boy):
    bedenKutleEndeksiHesabi = kutle/pow(boy,2)
    return bedenKutleEndeksiHesabi

def bedenKutleEndeksiHesabiSiniflandirma(kutle,boy):
    bedenKutleEndeksiHesabi = bedenKutleEndeksiHesapla(kutle,boy)
    if bedenKutleEndeksiHesabi < 18.5:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve zayıfsınız.')
    elif bedenKutleEndeksiHesabi > 18.5 and bedenKutleEndeksiHesabi < 24.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve normalsiniz.')
    elif bedenKutleEndeksiHesabi > 25 and bedenKutleEndeksiHesabi < 29.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve fazla kilolusunuz.')
    elif bedenKutleEndeksiHesabi > 30 and bedenKutleEndeksiHesabi < 39.9:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve şişmansınız.')
    else:
        print(f'Beden kütle endeksiniz: {bedenKutleEndeksiHesabi} ve obezsiniz acil hastaneye gidin.')

kisiKutlesi = int(input('Lütfen kilonuzu girin:'))
kisiBoy = int(input('Lütfen boyunuzu girin.'))

bedenKutleEndeksiHesabiSiniflandirma(kisiKutlesi,kisiBoy)

@dildeolupbiten hocam teşekkür ediyorum sorunum çözüldü ama benim anlamadığım bir kaç nokta var cevaplarsanız çok sevinirim.

bedenKutleEndeksiHesabi = bedenKutleEndeksiHesapla(kutle,boy)

neden bedenKutleEndeksiHesabi diye bir değişken oluşturup bedenKutleEndeksiHesapla(kutle,boy) buna eşitliyoruz fonksiyonlarda return geriye değer döndürmek için yok mu?
bedenKutleEndeksiHesabi neden return ile yukarıdaki fonksiyondan direk değeri çekmiyor return’ün amacı zaten bu işlem olmuyor mu?
Cevaplarınız için şimdiden teşekkürler.

bedenKutleEndeksiHesapla(kutle, boy) fonksiyonu şu şekilde kısaltılabilir:

def bedenKutleEndeksiHesapla(kutle,boy):
  return kutle/pow(boy,2)

Bu fonksiyonun içinde bir değişken tanımlarsak, bu değişken fonksiyonun dışında tanınmayacaktır. Fonksiyonun içi yerel bir alandır. Başka bir fonksiyonun bu fonksiyonun içindeki değişkene erişmesi için başka yöntemler denemek gerekir.

return kutle/pow(boy,2) ifadesi, fonksiyonun, bu işlemin sonucunu bize geri vereceği anlamına gelir. İster bu işlemi sizin yaptığınız gibi bir değişkene atayalım, değişkeni return edelim, ister doğrudan işlemin kendisini return edelim, geri dönen değer aynı olacaktır.

bedenKutleEndeksiHesabiSiniflandirma(kutle, boy) fonksiyonunda ise bir üstteki bedenKutleEndeksiHesapla(kutle,boy) fonksiyonunu 1 kez çağırıyoruz. Tanımladığınız işlemlere göre 1 kez çağrılması yeterlidir. Dolayısıyla bir tane değişken tanımlanabilir. Bu değişken ile bütün sorgular yapılır. Her sorgu esnasında fonksiyonu tekrar tekrar çağırmaya gerek yok. Yani en azından yukarıdaki işlem için gerekli değil.

Bir fonksiyonda return ifadesi varsa, o fonksiyonu a = fonksiyon() şeklinde çağırırsak, fonksiyondan geri dönen değer a değişkenine eşitlenir.

1 Beğeni

Hocam her şey için teşekkür ediyorum ayrıca fonksiyonu kısaltma yönteminiz çok hoşuma gitti yeni bir şeyler öğrenmiş oldum.

Kısaca bir fonksiyonu return ettiğimiz takdirde başka bir fonksiyon içinden return değerine direk ulaşamıyoruz ve bir değişkene aktarıp kullanıyoruz diyebilir miyiz?

Fonksiyon return etmek başka bir şeydir, fonksiyonun içindeki herhangi bir veriyi return etmek başka bir şeydir. Bu yukarıdaki fonksiyonlarda return edilen şey bir fonksiyon değil.

Şöyle anlatayım. Bir değişken kullanmak bizim için daha avantajlıysa a = fonksiyon() yazarak bu fonksiyondan dönen değeri a değişkenine atayabiliriz. Ama bazen fonksiyonu bir değişkene atamak yerine sadece çağırmak da yeterli olabilir.

1 Beğeni

Anladım teşekkür ederim sizi de yordum.