所以我对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!")
答案 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!")