Python NameError,变量'not defined'

时间:2016-06-21 21:43:13

标签: python variables python-3.5

它返回的错误是:

NameError: name 'lives' is not defined

我知道代码效率不高,这是我的第一个项目之一,不管我试图做什么,这个错误弹出,我已经尝试为它做一个全局,但这没有帮助。我真的很感激这方面的帮助,谢谢!

import random
import time

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

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

def repeat():
 replay = input("would you like to play again? Y/N")
 if replay == "Y":
     print("enjoy!")
     main()
 elif replay == "N":
     "Goodbye then, hope you enjoyed!"
     time.sleep(3)
     os._exit
 else:
     print("please enter Y or N")
     repeat()

main()
repeat()

编辑:将全局生命置于main()中会返回错误:

UnboundLocalError: local variable 'lives' referenced before assignment

3 个答案:

答案 0 :(得分:2)

您需要在函数main之外定义变量“lives”,然后在任何要引用该全局变量的函数中定义“全局生命”。当您在函数中并为变量赋值时,它假定它在本地范围内。使用“全球生命”告诉该功能将全球范围视为生命的参照。

import random
import time

lives = 10
win = False
guess = 0
rand_num = 45

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

def compare():
    global guess, rand_num, 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

def repeat():
    replay = input("would you like to play again? Y/N")
    if replay == "Y":
        print("enjoy!")
        main()
    elif replay == "N":
        "Goodbye then, hope you enjoyed!"
        time.sleep(3)
        os._exit
    else:
        print("please enter Y or N")
        repeat()

main()
repeat()

答案 1 :(得分:1)

您没有在lives内声明main()是全局的,因此它是该函数的本地。

def main():
    global guess, rand_num, lives
    ...

答案 2 :(得分:0)

当你在函数内部声明它们时,它们仅在该函数作用域中可用,因此在函数外部声明全局变量,代码将正常工作。

import random
import time

guess = None
random_num = None
lives = 3
win = False


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

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

def repeat():
 replay = input("would you like to play again? Y/N")
 if replay == "Y":
     print("enjoy!")
     main()
 elif replay == "N":
     "Goodbye then, hope you enjoyed!"
     time.sleep(3)
     os._exit
 else:
     print("please enter Y or N")
     repeat()

main()
repeat()

现在这很好用。有关gloval vs local变量的更多信息,请参阅:http://www.python-course.eu/global_vs_local_variables.php