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