Ошибка в программе угадай число
я решил написать программу "угадай число" на Python. Вот код:
from tkinter import *
from tkinter import messagebox
import random
num = random.randint(1,100)
def guess(entry):
while True:
guess = entry.get()
i = int(guess)
if i == num:
messagebox.showinfo("Ваш ответ", "Правильно!")
break
elif i > num:
messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
elif i < num:
messagebox.showinfo("Ваш ответ", "Загаданное число больше")
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()
num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()
btn = Button(tk,text="Отправить",command=guess)
btn.pack()
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()
Но выдаёт ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
TypeError: guess() missing 1 required positional argument: 'entry'
Я перевёл ошибку, но не понимаю как это исправить.
Ответы (2 шт):
Автор решения: Andy Pavlov
→ Ссылка
Немного поправил код. Вроде теперь как-то работает. Убрал цикл внутри guess(). Он там не нужен, т.к. делает бесконечный цикл на первом вводе. Плюс убрал в guess() переменную entry.
from tkinter import *
from tkinter import messagebox
import random
num = random.randint(1,100)
def guess():
#while True:
val = entry.get()
i = int(val)
if i == num:
messagebox.showinfo("Ваш ответ", "Правильно!")
elif i > num:
messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
elif i < num:
messagebox.showinfo("Ваш ответ", "Загаданное число больше")
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()
num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()
btn = Button(tk,text="Отправить",command=guess)
btn.pack()
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()
tk.mainloop()
Автор решения: GoblinAndLinuxoid
→ Ссылка
Я решил это так:
from tkinter import *
from tkinter import messagebox
import random
num = random.randint(1,100)
def guess():
while True:
guess1 = num1.get()
i = int(guess1)
if i == num:
messagebox.showinfo("Ваш ответ", "Правильно!")
break
elif i > num:
messagebox.showinfo("Ваш ответ", "Загаданное число меньше")
break
elif i < num:
messagebox.showinfo("Ваш ответ", "Загаданное число больше")
break
tk = Tk()
tk.title("Угадай число")
text = Label(tk,text="Введите число от 1 до 100")
text.pack()
num1 = IntVar()
entry = Entry(tk,width=50,textvariable=num1)
entry.pack()
btn = Button(tk,text="Отправить",command=guess)
btn.pack()
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas = Canvas(tk,width=400,height=300,bd=0,highlightthickness=0)
canvas.pack()