我对Python比较陌生,所以请忍受我的代码效率低下。这是我最早的Tkinter应用程序之一,非常简单。这是一个代码猜测游戏,用户尝试猜测随机生成的4位代码。该代码当前会打印随机生成的数字,以便更轻松地查看该代码是否正常工作。但是有没有办法在此代码中不使用全局变量。另外,如果有人告诉我如何提高代码效率,那将是有帮助的。提前致谢。代码:
import random
import tkinter as tk
number_of_tries = 0
def tries():
global number_of_tries
number_of_tries += 1
comment.configure(state="normal")
comment.delete(0, "end")
comment.insert(0, "Not quite! Keep trying!")
comment.configure(state="disabled")
if str(guess) == str(random_number):
comment.configure(state="normal")
comment.delete(0, "end")
comment.insert(0, "You guessed it in " + str(number_of_tries) + " tries!")
comment.configure(state="disabled")
guess_entry.configure(state="disabled")
go.configure(state="disabled")
def character_check():
global guess
guess = guess_entry.get()
if len(guess) != 4:
comment.configure(state="normal")
comment.delete(0, "end")
comment.insert(0, "Guess must be 4 digits! ")
comment.configure(state="disabled")
else:
for char in guess:
if char.isalpha():
comment.configure(state="normal")
comment.delete(0, "end")
comment.insert(0, "Guess must only include integers! ")
comment.configure(state="disabled")
else:
digit_check()
def digit_check():
global guess
guess = guess_entry.get()
for i in range(0, 4):
if str(guess)[i] == str(random_number)[i]:
digits[i] = str(guess)[i]
digit_display.configure(state="normal")
digit_display.delete(0, "end")
digit_display.insert(0, digits)
digit_display.configure(state="disabled")
elif str(guess)[i] != str(random_number)[i]:
digits[i] = "?"
digit_display.configure(state="normal")
digit_display.delete(0, "end")
digit_display.insert(0, digits)
digit_display.configure(state="disabled")
def initialise():
global number_of_tries, digits
global random_number
digits = ["?"] * 4
random_number = random.randrange(1000, 9999)
number_of_tries = 0
digit_display.configure(state="normal")
comment.configure(state="normal")
digit_display.delete(0, "end")
digit_display.insert(0, digits)
comment.delete(0, "end")
comment.insert(0, "Good luck!")
digit_display.configure(state="disabled")
comment.configure(state="disabled")
guess_entry.configure(state="normal")
go.configure(state="normal")
print(random_number)
screen = tk.Tk()
screen.geometry("400x400")
screen.title("Code Crunchers")
heading = tk.Label(text="Welcome to Code Crunchers!", font="Montserrat 15")
heading.place(relx=0.5, rely=0.1, anchor="center")
instruction_1 = tk.Label(text="Enter your guess below: ", font="Montserrat 10")
instruction_1.place(relx=0.5, rely=0.2, anchor="center")
guess_entry = tk.Entry(screen, width=4)
guess_entry.place(relx=0.5, rely=0.25, anchor="center")
go = tk.Button(text="Go", font="Montserrat 10", command=lambda: [character_check(), tries()])
go.place(relx=0.6, rely=0.27, anchor="center")
instruction_2 = tk.Label(text="Digits correct: ", font="Montserrat 10")
instruction_2.place(relx=0.5, rely=0.35, anchor="center")
digit_display = tk.Entry(screen, width=10)
digit_display.place(relx=0.5, rely=0.4, anchor="center")
comment = tk.Entry(screen, width=40)
comment.place(relx=0.5, rely=0.45, anchor="center")
restart = tk.Button(text="Restart", font="Montserrat 10", command=lambda: initialise())
restart.place(relx=0.5, rely=0.55, anchor="center")
initialise()
screen.mainloop()
答案 0 :(得分:0)
我要做的只是向用户显示尝试次数,然后从该对象读取以查看尝试次数。如果您不想将其显示给用户,则可以始终隐藏它,使其不显示。如果您根本不想在GUI上使用它,则应将此变量作为函数中的参数传递。