2016-07-03 20 views
0
from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     return "First time right! Genius?" 
     Validation = True 

    elif int(Guess) == Number and count == 2: 
     return "Correct. Second time, nice!" 
     Validation = True 
    elif int(Guess) == Number and count < 4: 
     return "Correct. Good job." 
     Validation = True 
    elif int(Guess) == Number and count > 3: 
     return "Correct. Took you long enough." 
     Validation = True 
    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
else: 
    TryAgain = input("Would you like to try again? y/n \n") 

Also das Problem ist, dass wenn der Benutzer die richtige Zahl rät. Die Validierung sollte auf "Wahr" gesetzt werden. Also hört die While-Schleife auf zu loopen. Die Validierung der Variablen wird jedoch nicht zu True, wenn der Spieler die richtige Zahl errät.Variable in einer Funktion ändern

+0

Die Validierung wird als lokal betrachtet, es sei denn, Sie geben ihr einen globalen Präfix. Wenn Sie Ihre globale Validierung von einer Funktion referenzieren möchten, müssen Sie dies so deklarieren: 'Globale Validierung' in der Funktion, so wird der Wert bei der Änderung des Wertes persistent –

+0

Hmm. wenn ich es global hinzufüge, ob ich es in der Funktion selbst mache, in der Variablendeklaration oben oder in der while-Schleife. Es gibt mir einen schlechten Syntaxfehler. – Soundwave

+0

Ein weiteres schwerwiegendes Problem in Ihrem Code besteht darin, dass Sie eine Zeichenfolge zurückgeben, die die Funktion effektiv unterbricht, bevor Sie das Feld "Überprüfung" festlegen. Bitte beachten Sie meine Antwort für die richtige Reihenfolge ('Validierung = True' nur als' return "..." ') –

Antwort

0

Globale Variablen in Python sind ein bisschen schwierig, es reicht nicht, eine Variable am Anfang der Datei zu deklarieren.

Auch halten Sie den Wert zurück, bevor Sie den Validierungswert, wodurch die Funktion setzen Sie diese Variable

Letzte Ausgabe der während Logik zu beenden, bevor Sie ist, siehe Korrektur für

statt Eingang und sonst Vertiefung mit raw_input

Der schreibgeschützte Zugriff auf globale Variablen funktioniert wie erwartet. Wenn jedoch die Änderung ihres Werts in einer Funktion einen zusätzlichen Schritt erfordert, sollten Sie die globale Variable als global deklarieren. In Ihrem Fall:

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation #<-- this instructs Python to use the global variable 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 

    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 

    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 

    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
    if (Validation): 
     if (raw_input("Would you like to try again? y/n \n") == "y"): 
      count = 0 
      Validation = False 
     else: 
      break 
0

Sie müssen Validation einstellen zu Wahre, bevor Sie von der Methode zurückkehren, wie folgt aus:

if int(Guess) == Number and count < 1: 
    Validation = True 
    return "First time right! Genius?" 

diese if-Anweisungen für alle.

0

ich zwei vor Ort (und eine Hälfte) Probleme im Code:

  1. Wie von Ishay Peled, müssen Sie Validation globale
  2. Ihre „return“ Aussagen vor gelegen, damit Sie ändern Sie den Wert von "Validation"
  3. "während" hat keine "else"

Hier ist der aktualisierte Code:

from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 
    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 
    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 
    else: 
     return "Wrong! Try again " 


while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    print "validation: %s" % str(Validation) 
    count += 1 

TryAgain = input("Would you like to try again? y/n \n") 
0

Neben dem Problem der globalen Variablen müssen Sie noch weitere Fixes erstellen. Alle Ihre Zuweisungen zu Validation = True werden nach den "return" -Anweisungen angezeigt. Die Validierung = True wird niemals ausgeführt! Es wird die Funktion verlassen, bevor diese ausgeführt wird. Setzen Sie "Validation = True", bevor Sie zurückkehren. Sie müssen immer noch die globale Erklärung haben, wie Ishay sagte.

Verwandte Themen