Python NameError, variable 'not defined'

前端 未结 3 761
梦谈多话
梦谈多话 2020-12-12 04:12

the error it returns is:

NameError: name \'lives\' is not defined

I know the code isn\'t as efficient as possible, this is one of my first

相关标签:
3条回答
  • 2020-12-12 04:22

    You didn't declare lives to be global inside main(), so it is local to that function.

    def main():
        global guess, rand_num, lives
        ...
    
    0 讨论(0)
  • 2020-12-12 04:39

    When you declare it inside function they are only available in that function scope, so declare global variables outside functions and code will work fine.

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

    And now this works fine. For more info about gloval vs local variables you can read: http://www.python-course.eu/global_vs_local_variables.php

    0 讨论(0)
  • 2020-12-12 04:40

    You need to define the variable "lives" outside of the function main, then any function where you want to reference that global variable you say "global lives." When you are in a function and assign a value to a variable, it assumes it is in the local scope. using "global lives" tells that function to look to the global scope as the reference of 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()
    
    0 讨论(0)
提交回复
热议问题