2016-08-11 2 views
1

Ich erstelle ein Ratespiel und ich habe zwei Funktionen erstellt. Eine, um die Benutzereingabe zu nehmen und die andere, um zu überprüfen, ob die Benutzereingabe korrekt ist.Der zurückgegebene Wert nicht definiert

def getGuess(maxNum): 
    if maxNum == "10": 
     count=0 
     guess = -1 
     guessnum = [ ] 
     while guess >10 or guess<0: 
      try: 
       guess=int(input("Guess?")) 
      except: 
       print("Please enter valid input") 
     guesses.append(guess) 
     return guesses 
     return guess 

def checkGuess(maxNum): 
    if maxNum == "10": 
     if guess>num1: 
      print("Too High") 
     elif guess<num1: 
      print ("Too Low") 
     else: 
      print("Correct") 
      print (guesses) 

und der Hauptcode ist

if choice == "1": 
    count = 0 
    print("You have selected Easy as the level of difficulty") 
    maxNum= 10 
    num1=random.randint(0,10) 
    print (num1) 
    guess = 11 
    while guess != num1: 
     getGuess("10") 
     checkGuess("10") 
     count = count+1 
    print (guess) 

Obwohl die Funktion gibt die Benutzer erraten der Code immer die Vermutung 11. nimmt Wenn ich Vermutung nicht definieren, ist es auch nicht. Bitte helfen Sie.

Antwort

0

Zuerst geben Sie zwei Werte zurück. Eine return Anweisung fungiert auch als break, so dass die zweite return nicht aufgerufen wird. Außerdem speichern Sie den zurückgegebenen Wert nicht irgendwo, so dass er einfach verschwindet.

Hier ist Ihre editierten Code:

def getGuess(maxNum): 
    if maxNum == "10": 
     guess = -1 
     while guess >10 or guess<0: 
      try: 
       guess=int(input("Guess?")) 
      except: 
       print("Please enter valid input") 
     return guess 

def checkGuess(maxNum, guess, num1): 
    if maxNum == "10": 
     if guess>num1: 
      print("Too High") 
     elif guess<num1: 
      print ("Too Low") 
     else: 
      print("Correct") 
      return True 
     return False 

if choice == "1": 
    count = 0 
    print("You have selected Easy as the level of difficulty") 
    maxNum= 10 
    num1=random.randint(0,10) 
    print (num1) 
    guess = 11 
    guesses = [] 
    while guess != num1: 
     guess = getGuess("10") 
     guesses.append(guess) 
     hasWon = checkGuess("10", guess, num1) 
     if hasWon: 
      print(guesses) 
      break 
     count = count+1 

You have selected Easy as the level of difficulty 
2 
Guess?5 
Too High 
Guess?1 
Too Low 
Guess?2 
Correct 
[5, 1, 2] 
>>> 
+0

Vielen Dank für Ihre Antwort, es hat mir geholfen. Ich wusste nicht, dass die Rückkehr auch eine Pause darstellt, tut mir auch leid, aber könntest du mir kurz sagen, was das untenstehende Stück tut. Wenn hasWon: Drucken (Vermutungen) brechen count = count + 1 –

+0

Also wenn Sie gewonnen haben, druckt es alle Vermutungen, die Sie getan haben, und beendet dann die 'while' Schleife, so dass Sie nicht ständig nach Eingabe fragen. Das 'count = count +' steht hinter der 'if' Anweisung, wenn Sie also nicht gewonnen haben, addiert es eins zu 'count', was die Anzahl der verwendeten Annahmen ist. –

+0

Hallo, wie hasWon = checkGuess ("10", rate, num1) wurde diese Anweisung zu einer Aussage, um zu überprüfen, ob der Benutzer gewonnen hat. Ist es nicht nur die Funktion, die verwendet wird, um die Schätzung zu überprüfen (ob sie richtig oder falsch ist)? Vielen Dank. Entschuldigung für den späten Kommentar. –

0

Sie haben einen Programmierstil I "Art und Hoffnung" nennen. maxNum scheint zwischen einer Zahl und einer Zeichenkette zu springen, die anzeigt, dass Sie Ihre Herangehensweise nicht durchdacht haben. Im Folgenden finden Sie eine Überarbeitung, bei der jede Routine versucht, ohne zusätzliche Variablen etwas Offensichtliches und Nützliches zu tun. (Ich habe choice Logik weg den Anfangs links, da es nicht auf dieses Beispiel beiträgt, die in Ihrer Wahl Rahmen gesetzt werden kann.)

import random 

def getGuess(maxNum): 
    guess = -1 

    while guess < 1 or guess > maxNum: 
     try: 
      guess = int(input("Guess? ")) 
     except ValueError: 
      print("Please enter valid input") 

    return guess 

def checkGuess(guess, number): 
    if guess > number: 
     print("Too High") 
    elif guess < number: 
     print("Too Low") 
    else: 
     print("Correct") 
     return True 

    return False 

print("You have selected Easy as the level of difficulty") 

maxNum = 10 

maxTries = 3 

number = random.randint(1, maxNum) 

count = 1 

guess = getGuess(maxNum) 

while True: 
    if checkGuess(guess, number): 
     break 

    count = count + 1 

    if count > maxTries: 
     print("Too many guesses, it was:", number) 
     break 

    guess = getGuess(maxNum) 

Ein paar bestimmte Dinge zu beachten: vermeiden except verwenden, ohne einem gewissen Sinn Welche Ausnahme erwartest du? Vermeiden Sie es, Zahlen als Zeichenfolgen zu übergeben - konvertieren Sie numerische Zeichenfolgen in Zahlen bei der Eingabe, wandeln Sie Zahlen in numerische Zeichenfolgen bei der Ausgabe um, verwenden Sie jedoch tatsächliche Zahlen dazwischen.

+0

Es tut mir leid für meinen Mangel an Wissen, da ich ein Anfänger bin, aber könntest du mir bitte mehr darüber erzählen, was du mit MaxNum zwischen einer Zahl und einer Saite gemeint hast. Und danke für deine Anregungen. –

+0

@RavinduGamage, ich bezog mich auf Code wie 'if maxNum ==" 10 ":' und 'maxNum = 10', die auf Ihren Code, keinen nützlichen Zweck durchgeführt. – cdlane

Verwandte Themen