Python 变量未定义,但我可以';我不知道为什么
我在学校做一个项目,但我的程序不断抛出一些未定义的变量,但我不知道为什么 该项目是做一个歌曲测试,用户必须猜测歌曲,并给出艺术家和每个单词的第一个字母 请注意,它尚未完成Python 变量未定义,但我可以';我不知道为什么,python,python-3.x,user-interface,tkinter,Python,Python 3.x,User Interface,Tkinter,我在学校做一个项目,但我的程序不断抛出一些未定义的变量,但我不知道为什么 该项目是做一个歌曲测试,用户必须猜测歌曲,并给出艺术家和每个单词的第一个字母 请注意,它尚未完成 #import modules from tkinter import * import os from random import randint #variable set up qnum = 0 loop = 0 userloop = 0 errorloop = 0 # Behind the scenes gam
#import modules
from tkinter import *
import os
from random import randint
#variable set up
qnum = 0
loop = 0
userloop = 0
errorloop = 0
# Behind the scenes game stuff
def random_song():
with open('data.txt') as f:
lines = f.readlines()
artist, song = lines[randint(1,43)].split(',')
return artist.strip(), song.strip()
def song_letters():
s = song
first_letters = [word[0] for word in s.split(' ')]
#def question_answer_verify():
# Designing window for registration
def register():
global register_screen
register_screen = Toplevel(main_screen)
register_screen.title("Register")
register_screen.geometry("300x250")
global username
global password
global username_entry
global password_entry
username = StringVar()
password = StringVar()
Label(register_screen, text="Please enter details below", bg="blue").pack()
Label(register_screen, text="").pack()
username_lable = Label(register_screen, text="Username * ")
username_lable.pack()
username_entry = Entry(register_screen, textvariable=username)
username_entry.pack()
password_lable = Label(register_screen, text="Password * ")
password_lable.pack()
password_entry = Entry(register_screen, textvariable=password, show='*')
password_entry.pack()
Label(register_screen, text="").pack()
Button(register_screen, text="Register", width=10, height=1, bg="blue", command = register_user).pack()
def main_game_screen():
global game_screen
main_screen.geometry("300x250")
main_screen.title("Game Screen")
Label(text="User: " + username1).pack()
Label(text="").pack()
Label(text=("Quesion ", qnum), bg="#83baff", width="300", height="2", font=("New Rail Alphabet", 15)).pack()
Label(text="").pack()
Label(text="What song is this?").pack()
Label(text="Artist: " + artist + ". Song: " + song).pack()
global question_answer_verify
question_answer_verify = StringVar()
global qanswer_entry
Label(login_screen, text="Answer").pack()
qanswer_entry = Entry(login_screen, textvariable=qanswer_verify)
qanswer_entry.pack()
Label(login_screen, text="").pack()
Label(login_screen, text="Score:" + qnum).pack()
main_game_screen.mainloop()
# Designing window for login
def login():
global login_screen
login_screen = Toplevel(main_screen)
login_screen.title("Login")
login_screen.geometry("300x250")
Label(login_screen, text="Please enter details below to login").pack()
Label(login_screen, text="").pack()
global username_verify
global password_verify
username_verify = StringVar()
password_verify = StringVar()
global username_login_entry
global password_login_entry
Label(login_screen, text="Username * ").pack()
username_login_entry = Entry(login_screen, textvariable=username_verify)
username_login_entry.pack()
Label(login_screen, text="").pack()
Label(login_screen, text="Password * ").pack()
password_login_entry = Entry(login_screen, textvariable=password_verify, show= '*')
password_login_entry.pack()
Label(login_screen, text="").pack()
Button(login_screen, text="Login", width=10, height=1, command = login_verify).pack()
# Implementing event on register button
def register_user():
username_info = username.get()
password_info = password.get()
file = open(username_info, "w")
file.write(username_info + "\n")
file.write(password_info)
file.close()
username_entry.delete(0, END)
password_entry.delete(0, END)
Label(register_screen, text="Registration Success", fg="green", font=("calibri", 11)).pack()
# Implementing event on login button
def login_verify():
global username1
username1 = username_verify.get()
password1 = password_verify.get()
username_login_entry.delete(0, END)
password_login_entry.delete(0, END)
list_of_files = os.listdir()
if username1 in list_of_files:
file1 = open(username1, "r")
verify = file1.read().splitlines()
if password1 in verify:
login_sucess()
main_game_screen()
else:
password_not_recognised()
else:
user_not_found()
# Designing popup for login success
def login_sucess():
global login_success_screen
login_success_screen = Toplevel(login_screen)
login_success_screen.title("Success")
login_success_screen.geometry("150x100")
Label(login_success_screen, text="Login Success").pack()
Button(login_success_screen, text="OK", command=delete_login_success).pack()
# Designing popup for login invalid password
def password_not_recognised():
global password_not_recog_screen
password_not_recog_screen = Toplevel(login_screen)
password_not_recog_screen.title("Success")
password_not_recog_screen.geometry("150x100")
Label(password_not_recog_screen, text="Invalid Password ").pack()
Button(password_not_recog_screen, text="OK", command=delete_password_not_recognised).pack()
# Designing popup for user not found
def user_not_found():
global user_not_found_screen
user_not_found_screen = Toplevel(login_screen)
user_not_found_screen.title("Success")
user_not_found_screen.geometry("150x100")
Label(user_not_found_screen, text="User Not Found").pack()
Button(user_not_found_screen, text="OK", command=delete_user_not_found_screen).pack()
# Deleting popups
def delete_login_success():
login_success_screen.destroy()
def delete_password_not_recognised():
password_not_recog_screen.destroy()
def delete_user_not_found_screen():
user_not_found_screen.destroy()
def delete_question_screen():
game_screen.destroy()
def exitgame():
exit()
# Designing Main(first) window
def main_account_screen():
global main_screen
main_screen = Tk()
main_screen.geometry("300x250")
main_screen.title("Account Login")
Label(text="Welcome to Ed's Metal Music Quizz!", bg="#83baff", width="300", height="2", font=("New Rail Alphabet", 15)).pack()
Label(text="Please login or register to play", bg="#83baff", width="300", height="1", font=("New Rail Alphabet", 11)).pack()
Label(text="").pack()
Button(text="Login", height="2", width="30", command = login).pack()
Label(text="").pack()
Button(text="Register", height="2", width="30", command=register).pack()
Label(text="").pack()
Button(text="Exit Game", height="2", width="10", command=exitgame).pack()
main_screen.mainloop()
main_account_screen()
#Main game
while loop != 10:
qnum+1
game_screen.mainloop()
在VS代码中,当我登录时,它会显示:
终止:15 bash-3.2美元cd
“/Users/edthwaites/Documents/Programming/Python/School/Metal Muzic
测验”;env PythonionEncoding=UTF-8 PYTHONUNBUFFERED=1
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
/Users/edthwaites/.vscode/extensions/ms-python.python-2020.1.58038/pythonFiles/ptvsd_launcher.py
--默认--客户端--主机本地主机--端口51520“/Users/edthwaites/Documents/Programming/Python/School/Metal Muzic
Tkinter回调回溯中的Quizz/quizzmainprogram.py“异常
(最近一次调用上次):文件
“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/init.py”,
第1705行,在呼叫中
返回self.func(*args)文件“/Users/edthwaites/Documents/Programming/Python/School/Metal Muzic
Quizz/quizzmainprogram.py”,登录验证中的第141行
main_game_screen()文件“/Users/edthwaites/Documents/Programming/Python/School/Metal Muzic
“Quizz/quizzmainprogram.py”,第63行,主屏幕
标签(text=“Artist:+Artist+”.Song:+Song).pack()名称错误:未定义名称“Artist”
但是我不明白为什么在函数random_song()中定义了变量artist,所以它是一个局部变量。函数完成执行后,它的局部变量基本上被删除。您试图访问函数main_game_screen()中的变量artist,但尚未在其中定义它。您可以执行以下任一操作:
- 使用class变量artist创建一个类
- 从函数返回变量artist的值以重用它
- 将变量设置为全局(这是一种糟糕的做法)