Python 名称错误,变量没有定义

2024-04-28 04:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

它返回的错误是:

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()

EDIT:puting global lives in main()返回错误:

UnboundLocalError: local variable 'lives' referenced before assignment

Tags: importreplaytimemaindef错误globalwin
3条回答

您没有声明livesmain()中是全局的,因此它是该函数的本地函数。

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

您需要在函数main之外定义变量“lives”,然后在要引用该全局变量的任何函数中定义“global 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()

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

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与局部变量的详细信息,可以阅读:http://www.python-course.eu/global_vs_local_variables.php

相关问题 更多 >