Python 3.5 - Number Picker游戏,while loop&变量(初级)

时间:2016-06-19 21:13:39

标签: python loops variables while-loop boolean

所以我对python很新,我的while循环或布尔胜利值似乎有问题,即使在我赢了之后它仍然要求另一个数字。我的生活变量也存在问题,因为每当我得到错误答案时,它就会出现错误; “UnboundLocalError:赋值前引用的局部变量'生命'” PS。 '随机'数字总是45,所以我很容易赢得解决问题 lives variable pic while loop problem pic     随机导入     进口时间

def compare():
 if guess == rand_num:
    print("You guessed correct!")
    win = True
 elif guess > rand_num:
    print ("Guess lower!")
    lives = lives - 1
 else:
    print ("Guess higher!")
    lives = lives - 1

win = False
rand_num = 45
lives = 10
while lives > 0:
 if win == False:
     guess = int(input("Guess a number!"))
     compare()
time.sleep(3)
print("Well done!")

3 个答案:

答案 0 :(得分:0)

在比较功能的开头添加行global lives

您获得的错误local variable lives referenced before assignment表示您正在访问本地变量,但该变量不存在。在这种情况下,您需要告诉python该变量不是本地变量,而是一个全局变量。

如果您没有分配值(例如,在函数比较中只有print(lives)),就不会发生这种情况。在这种情况下,python解释器将使用全局值。事实上你分配给变量会导致python将其视为局部变量,并且为了进行分配,您需要在分配任何值之前计算lives - 1。行global lives使其使用模块中的变量,而不是创建局部变量。

答案 1 :(得分:0)

现在,您的代码理所当然地认为“compare”函数将知道要使用哪些变量。除非您明确定义或提供这些变量,否则函数不知道要在其中使用的值。要修复代码,您应该写:

def compare(guess, lives, rand_num):
    ...

而不是使用不带参数的compare()。然后,在while循环中,不是调用“compare()”,而是将两个变量传递给函数,如下所示:

compare(guess, lives, rand_num)

你还需要确保在你获胜时while循环中断,这样它就不会永远运行。你的while循环现在应该是这样的:

while lives>0:
    if win==False:
        guess = int(input("Guess a number!"))
        compare(guess, lives, rand_num)
    if win==True: #you could also write "if win:"
        break

这样,当你获胜时,你的循环就会终止。

答案 2 :(得分:-1)

首先,在函数的开头添加全局生命,然后将if语句转换为while循环的一部分,如下所示:

def compare():
    global lives,win
    if guess == rand_num:
        print("You guessed correct!")
        win = True
    elif guess > rand_num:
        print ("Guess lower!")
        lives = lives - 1
    else:
        print ("Guess higher!")
        lives = lives - 1
win = False
rand_num = 45
lives = 10
while lives > 0 and win == False:
    guess = int(input("Guess a number!"))
    compare()
time.sleep(3)
print("Well done!")