Python kod hatası

EmrahGK

Hectopat
Katılım
22 Aralık 2018
Mesajlar
1.436
Makaleler
1
Çözümler
13
Yer
İstanbul
Python'a tekrardan bir bakayım dedim. Bildiğim tüm tuşlara basarak aşağıdaki programı yazmaya çalıştım :D. (Udemy kursumdaki proglamlama ödevi). Yazılan kodda bir hata olmamasına rağmen durum değişkenini bir türlü tekrar tanımlayamıyorum. Yani programın şöyle çalışmasını istiyorum:

Value error vs. vermiyor, sadece durum değişkenini tekrar tanımlamamda bir problem var muhtemelen

----------------------------
HESAPLAMA ARACI
(çıkmak için q'ya basın)
---------------------------
.... girin = üçgen
Birinci kenarı girin: 8
İkinci kenarı girin: 8
üçüncü kenarı girin: 4

Kenarlarını girdiğiniz şekil üçgen belirtmektedir ve ikizkenar bir üçgendir.

[CODE lang="python" title="Kod" highlight="6-17"]
print("""---------------------------------------
HESAPLAMA ARACI
(çıkmak için q'ya basın)
---------------------------------------""")

durum=" "
eskenar = "ve bu şekil bir eşkenar üçgendir."
ikizkenar = "ve bu şekil bir ikizkenar üçgendir"
diger = "ve bu şekil sıradan bir üçgendir"

def ucgen(a,b,c):
if(a == b and a == c):
return durum == eskenar
if(a == b or b == c or a == c):
return durum == ikizkenar
else:
return durum == diger

while True:

soru = str(input("üçgen mi dörtgen mi?: "))


if(soru == "dörtgen" or soru == "Dörtgen"):

bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))
dort = int(input("Dördüncü kenarı gir: "))


if(bir == iki and bir == uc and bir == dort):
print("Girdiğiniz şekil bir karedir..")
break
if(bir == uc and iki == dort):
print("Girdiğiniz şekil bir dikdörtgendir..")
break
else:
print("Girdiğiniz şekil sıradan bir dörtgendir..")
break

if(soru == "Üçgen" or soru == "üçgen"):

bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))

ucgen(bir,iki,uc)

if(abs(iki-uc) < bir < iki + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-uc) < iki < bir + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-iki) < uc < bir + iki):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
else:
print("Kenarlarını girdiğiniz şekil üçgen belirtmemektedir, tekrar deneyin")

if(soru == "q"):
break

else:
print("Lütfen geçerli bir işlem girin..")[/CODE]
 
Son düzenleme:

Katroku

Decapat
Katılım
27 Ağustos 2020
Mesajlar
2.139
Çözümler
18
Yer
Istanbul
Python:
def ucgen(a,b,c):
    if(a == b and a == c):
        return durum == eskenar
    if(a == b or b == c or a == c):
        return durum == ikizkenar
    else:
        return durum == diger
Bir return cumlesinde bir sey tanimlayamazsiniz, ayrica kullandiginiz ifade (==) de tanimlamak icin degil esitlik gostermek icin kullaniliyor. if cumlelerindeki () kodun calismasini engellemiyor ama gerekli degil, ve ikinci if cumlesini elif yapip buralarda sadece durumu tanimlayip en son satirda deger dondurmeniz daha mantikli olacaktir. Yeni kod:
Python:
def ucgen(a, b, c):
    if a == b and a == c:
        durum = eskenar
    if a == b or b == c or a == c:
        durum = ikizkenar
    else:
        durum = diger
    return durum
 
KS
KS
EmrahGK

EmrahGK

Hectopat
Katılım
22 Aralık 2018
Mesajlar
1.436
Makaleler
1
Çözümler
13
Yer
İstanbul
Bir return cumlesinde bir sey tanimlayamazsiniz, ayrica kullandiginiz ifade (==) de tanimlamak icin degil esitlik gostermek icin kullaniliyor. if cumlelerindeki () kodun calismasini engellemiyor ama gerekli degil, ve ikinci if cumlesini elif yapip buralarda sadece durumu tanimlayip en son satirda deger dondurmeniz daha mantikli olacaktir. Yeni kod:
Hocam kodu düzeltmeme rağmen durum'un değeri değişmiyor. Denemek için ayrı olarak print(durum) yaptım ve yine 6.satırdaki kod olarak çalıştı. (" ")
 

yusufYAZICI155

Centipat
Katılım
3 Ocak 2021
Mesajlar
154
Çözümler
2
Şimdi return kısmını pek bilmediğim için durum değişkenini global olarak tanıtmamız gerek çünkü def içinde yazılan değişkene atama yapılma başlandığı an o yerel değişken oluyor o yüzden global durum yazalımki kodlar arasında genel olarak tanıtılsın

== diye bir atama yoktur sadece = 1 tane konulması gerek
durum = "ikizkenar" gibi yapman gerek

birde def'deki if leri sırayla koşul oluşturmak istiyorsanız
if
elif
else diye gitmelidir yoksa aksi takdir 1. if tamamlayıp 2. yede bakacaktır o da olursa 2.if tamamlıyacaktır. aslında eşkenar için kenarları girdiğimizde cevap ikizkenar olarak çıkıyordu.
o yüzde elif koymamız gerekti.

[CODE lang="python" title="Python"]print("""---------------------------------------
HESAPLAMA ARACI
(çıkmak için q'ya basın)
---------------------------------------""")

durum=" "
eskenar = "ve bu şekil bir eşkenar üçgendir."
ikizkenar = "ve bu şekil bir ikizkenar üçgendir"
diger = "ve bu şekil sıradan bir üçgendir"

def ucgen(a,b,c):
global durum
if(a == b and a == c):
durum = "eskenar"
elif(a == b or b == c or a == c):
durum = "ikizkenar"
else:
durum = "diger"

while True:
soru = str(input("üçgen mi dörtgen mi?: "))
if(soru == "dörtgen" or soru == "Dörtgen"):
bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))
dort = int(input("Dördüncü kenarı gir: "))

if(bir == iki and bir == uc and bir == dort):
print("Girdiğiniz şekil bir karedir..")
break
if(bir == uc and iki == dort):
print("Girdiğiniz şekil bir dikdörtgendir..")
break
else:
print("Girdiğiniz şekil sıradan bir dörtgendir..")
break
if(soru == "Üçgen" or soru == "üçgen"):
bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))

ucgen(bir,iki,uc)

if(abs(iki-uc) < bir < iki + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-uc) < iki < bir + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-iki) < uc < bir + iki):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
else:
print("Kenarlarını girdiğiniz şekil üçgen belirtmemektedir, tekrar deneyin")

if(soru == "q"):
break
else:
print("Lütfen geçerli bir işlem girin..")[/CODE]
 
KS
KS
EmrahGK

EmrahGK

Hectopat
Katılım
22 Aralık 2018
Mesajlar
1.436
Makaleler
1
Çözümler
13
Yer
İstanbul
Şimdi return kısmını pek bilmediğim için durum değişkenini global olarak tanıtmamız gerek çünkü def içinde yazılan değişkene atama yapılma başlandığı an o yerel değişken oluyor o yüzden global durum yazalımki kodlar arasında genel olarak tanıtılsın

== diye bir atama yoktur sadece = 1 tane konulması gerek
durum = "ikizkenar" gibi yapman gerek

birde def'deki if leri sırayla koşul oluşturmak istiyorsanız
if
elif
else diye gitmelidir yoksa aksi takdir 1. if tamamlayıp 2. yede bakacaktır o da olursa 2.if tamamlıyacaktır. aslında eşkenar için kenarları girdiğimizde cevap ikizkenar olarak çıkıyordu.
o yüzde elif koymamız gerekti.

[CODE lang="python" title="Python"]print("""---------------------------------------
HESAPLAMA ARACI
(çıkmak için q'ya basın)
---------------------------------------""")

durum=" "
eskenar = "ve bu şekil bir eşkenar üçgendir."
ikizkenar = "ve bu şekil bir ikizkenar üçgendir"
diger = "ve bu şekil sıradan bir üçgendir"

def ucgen(a,b,c):
global durum
if(a == b and a == c):
durum = "eskenar"
elif(a == b or b == c or a == c):
durum = "ikizkenar"
else:
durum = "diger"

while True:
soru = str(input("üçgen mi dörtgen mi?: "))
if(soru == "dörtgen" or soru == "Dörtgen"):
bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))
dort = int(input("Dördüncü kenarı gir: "))

if(bir == iki and bir == uc and bir == dort):
print("Girdiğiniz şekil bir karedir..")
break
if(bir == uc and iki == dort):
print("Girdiğiniz şekil bir dikdörtgendir..")
break
else:
print("Girdiğiniz şekil sıradan bir dörtgendir..")
break
if(soru == "Üçgen" or soru == "üçgen"):
bir = int(input("Birinci kenarı gir: "))
iki = int(input("İkinci kenarı gir: "))
uc = int(input("Üçüncü kenarı gir: "))

ucgen(bir,iki,uc)

if(abs(iki-uc) < bir < iki + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-uc) < iki < bir + uc):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
if(abs(bir-iki) < uc < bir + iki):
print("Kenarlarını girdiğiniz şekil üçgen belirtmektedir ",durum)
break
else:
print("Kenarlarını girdiğiniz şekil üçgen belirtmemektedir, tekrar deneyin")

if(soru == "q"):
break
else:
print("Lütfen geçerli bir işlem girin..")[/CODE]
Dediğiniz gibi yaptığım zaman oldu. Aynı zamanda @kernel.bin 'in yazdığı koddaki fonksiyonun ilk satırına global durum yazınca da çalıştı. İkinize de ayrı ayrı teşekkür ediyorum :). İleride UI tasarımını vs. öğrendiğimde bu küçük programı biraz daha geliştirmeyi planlıyorum. İyi forumlar


1643283690129.png
 
Yukarı