2016-07-03 52 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") 

所以问题是,当用户猜测正确的数字。验证应该转为True。所以while循环将停止循环。但是当玩家猜测到正确的数字时,变量验证不会变为真。更改函数中的变量

+0

验证被认为是本地的,除非您在全局前缀。如果你希望从一个函数中引用你的全局验证,你需要声明如下:函数中的'global Validation',这种方式当你改变它的值时它会持续 –

+0

嗯。当我为它添加全局变量时,我会在函数本身,顶部的变量声明或while循环中执行它。它给我一个不好的语法错误。 – Soundwave

+0

你的代码中的另一个主要问题是你返回一个字符串,在设置验证字段之前有效地打破了该函数。请参阅我的答案以获得正确的顺序('Validation = True' only than'return“...”') –

回答

0

Python中的全局变量有点棘手,仅仅在文件顶部声明一个变量是不够的。

另外,请您设置的验证值,然后返回的值,导致功能设置这个变量

末发行前终止是同时逻辑,见校正使用输入和其他压痕

的的raw_input而不是

只读访问全局变量按预期工作,但在函数中更改其值时需要一个额外的步骤,则应该将全局变量声明为全局变量。你的情况:

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

您需要设置验证之前,你从方法返回,就像这样:

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

这样做对所有if语句。

0

我发现两(半)的问题在你的代码:

  1. 正如Ishay佩莱德指出的那样,你需要之前进行确认全球
  2. 你的“回归”的语句位于你更改“验证”
  3. 的价值“而”没有“其他”

下面是更新后的代码:

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

除了全局变量问题,您还需要制作另一组修复程序。 “返回”语句之后,所有赋值为Validation = True。 Validation = True永远不会执行!它将在执行之前退出该功能。在“返回”之前设置“Validation = True”。你仍然需要像Ishay所说的那样拥有全球声明。