Çözüldü Python kodundaki hata ne?

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

mehanil

Centipat
Katılım
23 Temmuz 2021
Mesajlar
100
Python:
import time
import random
def s2():
    print("---------------------------------------------------------------------------------")
    sh0 = input("Onlara ateş etmek için 1'e ve ardından Enter'a bas.")
    try:
        sh0 = int(sh0)
        if sh0 == 1:
        global rm1
        rm1 = random.randint(5,8)
            def s3():
                if rm1 > 0:
                    print("Ateş ettin. Ancak hala askerler var.")
                    rm1 = rm1 - 1
                    sh1 = input("Tekrar ateş etmek için 1'e ve ardından Enter'a bas.")
                    try:
                        sh1 = int(sh1)
                        if sh1 == 1:
                            s3()
                        else:
                            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                            time.sleep(2)
                            s2()
                    except:
                        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                        time.sleep(2)
                        s2()
                if rm1 == 0:
                    print("Hepsi öldü. Yoluna devam ediyorsun.")
            s3()
        else:
            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
            time.sleep(2)
            s2()
    except:
        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
        time.sleep(2)
        s2()
s2()

Kodum her 1 girdisi verildiğinde vurularak öldürüldün diyor. Nasıl düzeltebilirim?
 
Çözüm
Evet, direkt olarak en yakın except bloğuna atlayıp oradaki kodu çalıştırıyor. Senin kodunda except içine yazdığın kodu çok fazla tekrar ettiğin için aynı kodları raise Exception() ile değiştirdim. İstemediğin durumlarda except bloğu içindeki kod çalışıyor.
Global değişkeni değiştirmek istediğin fonksiyonun içinde tekrar global kullanman gerekiyor.

Python:
import time
import random
def s2():
    print("---------------------------------------------------------------------------------")
    sh0 = input("Onlara ateş etmek için 1'e ve ardından Enter'a bas.")
    try:
        sh0 = int(sh0)
        if sh0 == 1:
            global rm1
            rm1 = random.randint(5,8)
            def s3():
                global rm1
                if rm1 > 0:
                    print("Ateş ettin. Ancak hala askerler var.")
                    rm1 = rm1 - 1
                    sh1 = input("Tekrar ateş etmek için 1'e ve ardından Enter'a bas.")
                    try:
                        sh1 = int(sh1)
                        if sh1 == 1:
                            s3()
                        else:
                            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                            time.sleep(2)
                            s2()
                    except:
                        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                        time.sleep(2)
                        s2()
                if rm1 == 0:
                    print("Hepsi öldü. Yoluna devam ediyorsun.")
            s3()
        else:
            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
            time.sleep(2)
            s2()
    except:
        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
        time.sleep(2)
        s2()
s2()
 
Global değişkeni değiştirmek istediğin fonksiyonun içinde tekrar global kullanman gerekiyor.

Python:
import time
import random
def s2():
    print("---------------------------------------------------------------------------------")
    sh0 = input("Onlara ateş etmek için 1'e ve ardından Enter'a bas.")
    try:
        sh0 = int(sh0)
        if sh0 == 1:
            global rm1
            rm1 = random.randint(5,8)
            def s3():
                global rm1
                if rm1 > 0:
                    print("Ateş ettin. Ancak hala askerler var.")
                    rm1 = rm1 - 1
                    sh1 = input("Tekrar ateş etmek için 1'e ve ardından Enter'a bas.")
                    try:
                        sh1 = int(sh1)
                        if sh1 == 1:
                            s3()
                        else:
                            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                            time.sleep(2)
                            s2()
                    except:
                        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
                        time.sleep(2)
                        s2()
                if rm1 == 0:
                    print("Hepsi öldü. Yoluna devam ediyorsun.")
            s3()
        else:
            print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
            time.sleep(2)
            s2()
    except:
        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
        time.sleep(2)
        s2()
s2()
Teşekkürler, bunu denediğimde çalıştı ancak en sonda hepsi öldü kısmını rm1 sayısı kadar print ediyor. Bunun çözümü nedir?
 
Teşekkürler, bunu denediğimde çalıştı ancak en sonda hepsi öldü kısmını rm1 sayısı kadar print ediyor. Bunun çözümü nedir?
Recursive fonksiyon kullanmak yerine yapmak istediğini döngü içinde yapabilirsin.

Python:
import time
import random
def s2():
    print("---------------------------------------------------------------------------------")
    sh0 = input("Onlara ateş etmek için 1'e ve ardından Enter'a bas.")
    try:
        sh0 = int(sh0)
        if sh0 == 1:
            global rm1
            rm1 = random.randint(5,8)
            while True:
                rm1 = rm1 - 1
                if rm1 > 0:
                    print("Ateş ettin. Ancak hala askerler var.")
                    sh1 = input("Tekrar ateş etmek için 1'e ve ardından Enter'a bas.")
                    sh1 = int(sh1)
                    if sh1 != 1:
                        raise Exception()
                elif rm1 == 0:
                    print("Hepsi öldü. Yoluna devam ediyorsun.")
                    break
                else: raise Exception()
        else: raise Exception()
    except:
        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
        time.sleep(2)
        s2()
s2()
 
Son düzenleme:
Recursive fonksiyon kullanmak yerine yapmak istediğini döngü içinde yapabilirsin.

Python:
import time
import random
def s2():
    print("---------------------------------------------------------------------------------")
    sh0 = input("Onlara ateş etmek için 1'e ve ardından Enter'a bas.")
    try:
        sh0 = int(sh0)
        if sh0 == 1:
            global rm1
            rm1 = random.randint(5,8)
            while True:
                rm1 = rm1 - 1
                if rm1 > 0:
                    print("Ateş ettin. Ancak hala askerler var.")
                    sh1 = input("Tekrar ateş etmek için 1'e ve ardından Enter'a bas.")
                    sh1 = int(sh1)
                    if sh1 != 1:
                        raise Exception()
                elif rm1 == 0:
                    print("Hepsi öldü. Yoluna devam ediyorsun.")
                    break
                else: raise Exception()
        else: raise Exception()
    except:
        print("Vurularak öldürüldün. Son kayıt noktasından devam edeceksin.")
        time.sleep(2)
        s2()
s2()
Raise exception'daki mantığı tam anlayamadım. Anlatabilir misiniz? Direk alttaki except kısmına mı atlıyor?
 
Son düzenleme:
Evet, direkt olarak en yakın except bloğuna atlayıp oradaki kodu çalıştırıyor. Senin kodunda except içine yazdığın kodu çok fazla tekrar ettiğin için aynı kodları raise Exception() ile değiştirdim. İstemediğin durumlarda except bloğu içindeki kod çalışıyor.
 
Çözüm

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı