Fehler bei einem GuessNumber Spiel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PythonCoder9999
User
Beiträge: 1
Registriert: Samstag 1. Dezember 2018, 23:17

Hey Leute,

ich habe ein guessnumber spiel programmiert und bekommen einen Fehler:
Anzahl der Versuche: g
Traceback (most recent call last):
File "C:/Users/fabia/iCloudDrive/Python/GuessANumber/main.py", line 44, in <module>
spielen()
File "C:/Users/fabia/iCloudDrive/Python/GuessANumber/main.py", line 7, in spielen
anzahl = int(input("Anzahl der Versuche: "))
ValueError: invalid literal for int() with base 10: 'g'

Hier ist der Code:

from random import randint



def spielen():
global anzahl, randomNumber, guessNumber
anzahl = int(input("Anzahl der Versuche: "))
if type(anzahl) == int:
randomNumber = randint(1,10)
guessNumber = int(input("Welche Nummber raten Sie: "))
if type(guessNumber) == int:
if randomNumber == guessNumber:
print("Wow, herzlichen Glückwunsch")
else:
print("Schade nächtes mal")

else:
print("Bitte geben sie eine Zahl ein!!")
restart()
else:
print("Bitte geben sie eine Zahl ein!!")
restart()


def restart():
spielen()
spielen()

Nur zu Info:
-anzahl habe ich noch nicht benutzt (nur am start, hat aber noch keine funktion)
-ich möchte, dass wenn die Anzahl der Spiele abgefragt wird die Schleife von Vorne abläuft, sobald dort kein in steht

Danke für eure Hilfe,
PythonCoder9999
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte benutz die Code-Tags aus dem vollständigen Editor um deinen Code vernünftig darzustellen. So ist er nicht verständlich, weil die Einrückungen verloren gehen.

Und zu deinem Problem: wenn du “g” eingibst, weiß Python halt nicht, wie es daraus eine Zahl machen soll.
Schlange
User
Beiträge: 15
Registriert: Freitag 24. August 2018, 12:03

Hall PythonCoder9999,
ich habe deinen Code mal ein wenig abgeänder und bei mir funktioniert er jetzt.
Ich hoffe es ist jetzt so wie du es woltest.

Code: Alles auswählen

from random import randint
    
def vorarbeit():
    try:
        anzahl = int(input("Anzahl der Versuche: "))
        spielen(anzahl)            
    except:
        print('ungültiger Eingabewert!')
        vorarbeit()
        
def spielen(anzahl):
    for durchgang in range(0, anzahl):
        randomNumber = randint(1,10)
        try:
            guessNumber = int(input("Welche Nummber raten Sie: "))
            if randomNumber == guessNumber:
                print("Wow, herzlichen Glückwunsch")
            else:
                print("Schade nächtes mal")
        except:
            print("Bitte geben sie eine Zahl ein!!")
        
vorarbeit()
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Schlange schon besser, aber deine Lösung zählt fehleingaben als Versuche. Und die Rekursion in Vorarbeit ist zwar praktisch irrelevant weil wohl niemand dieses Spiel so lange spielt wie das Rekursionslimit. Aber damit benutzt du trotzdem das falsche Mittel. Einfaches while genügt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@PythonCoder9999: vergiss gleich wieder, dass es soetwas wie `global` gibt. Alles was eine Funktion braucht, bekommt sie per Argumente, Ergebnisse werden über `return` an den Aufrufer zurückgegeben.

@Schlange: Keine nakten except benutzen, das überdeckt auch viele Programmierfehler. Den try-Block so klein wie nötig machen und nur die Exceptions abfangen, die auch wirklich sinnvoll verarbeitet werden können, bei Dir also ValueError.
Antworten