Python NameError, variable not defined

Python NameError, variable not defined

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

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

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

Python NameError, variable not defined

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

Leave a Reply

Your email address will not be published. Required fields are marked *