Обработка ввода в Python Tkinter(угадай число)

Суть игры объяснять не буду, все знают. Помогите справиться с такой задачей - нужно чтоб при нажатии кнопки программа проверяла введённое число и сравнивала его с рандомным, если введённое число неверное, очищала поле и сравнивала следующее введённое число с ТЕМ ЖЕ рандомным числом.. Три дня сижу над реализацией(( Я новичок. Сейчас программа при каждом нажатии кнопки формирует новое рандомное сило и получается игра в которую никогда нельзя выиграть)) Помогите пожалуйста, очень хочется реализовать)

from tkinter import *
from random import randint

root = Tk()

root.title('Числовая угадайка')
root.resizable(False, False)
root.geometry('500x300')

welcome = Label(text='Добро пожаловать в числовую угадайку!\n', font='50')
welcome.pack()

enter_num = Label(text='Я загадал число от 1 до 100, отгадай и введи его ниже:\n', font='20')
enter_num.pack()


def getNumEnter():  # функция проверки введённых данных
    num = numEnter_field.get()
    if num.isdigit() and 0 < int(num) < 100:
        return int(num)
    else:
        result.config(text='Что-то вы ввели не то, нужно целое число от 1 до 100!')


numEnter_field = Entry(root, font='50', justify=CENTER)
numEnter_field.pack()

result = Label(root, font='50', justify=CENTER, fg='red')
result.pack()


def game():
    rand_num = randint(1, 100)
    try_count = 1
    num = getNumEnter()
    while num != rand_num:
        if num < rand_num:
            result.config(text='Загаданное число больше, попробуйте ещё разок')
            numEnter_field.delete(0, END)
            num = numEnter_field.get()
            try_count += 1
        if int(num) > rand_num:
            result.config(text='Загаданное число меньше, попробуйте ещё разок')
            numEnter_field.delete(0, END)
            num = numEnter_field.get()
            try_count += 1
        if int(num) == rand_num:
            result.config(text=f'Вы угадали, поздравляем! Количество ваших попыток: {try_count}')
            break


btnRead = Button(root, height=1, width=10, text="Угадать", command=game)
btnRead.pack()


root.mainloop()


Ответы (1 шт):

Автор решения: insolor

Цикл вообще убираем. У вас он бесконечный, потому что внутри него num не меняется. Просто на каждое нажатие проверяете что ввел пользователь.

Загадывание (генерацию загаданного числа) нужно делать один раз при старте программы, сейчас получается, что при каждом нажатии на кнопку генерируется новое число, и фактически невозможно будет угадать, что загадано (можно с вероятностью 1%).

Для подсчета попыток используем глобальную переменную.

Возврат на начало игры не делаю, это вам "домашнее задание".

Итого, получается такой код:

...  # Все выше функции game - без изменений

def game():
    global try_count

    num = getNumEnter()
    if num is None:  # Функция ничего не вернула, значит была ошибка ввода
        return

    if num < rand_num:
        result.config(text='Загаданное число больше, попробуйте ещё разок')
        numEnter_field.delete(0, END)
        try_count += 1
    elif num > rand_num:
        result.config(text='Загаданное число меньше, попробуйте ещё разок')
        numEnter_field.delete(0, END)
        try_count += 1
    elif num == rand_num:
        result.config(text=f'Вы угадали, поздравляем! Количество ваших попыток: {try_count}')


btnRead = Button(root, height=1, width=10, text="Угадать", command=game)
btnRead.pack()

try_count = 1
rand_num = randint(1, 100)

root.mainloop()
→ Ссылка