Проблема с вашим кодом заключается в том, что <RETURN>
связан с start_game()
, поэтому, хотя вы полагаете, что просматриваете догадки и ответы, факт заключается в том, что каждый раз, когда пользователь нажимает <RETURN>
в своем ответе, новыйэкземпляр start_game()
начинается!Вместо этого нам нужно разделить настройку нового слова (он же start_game()
из события <RETURN>
(он же score_game()
).
. Я переработал ваш код в соответствии с этими строками ниже - для простоты ябросил временный код в целом, так как он был сломан и не является частью вашего вопроса:
from random import shuffle
from tkinter import *
JUMBLED, PLAINTEXT = 0, 1
tv_shows = [
'Game of Thrones', 'Friends', 'How I Met Your Mother', 'Breaking Bad', 'Narcos', 'Flash', 'Arrow', 'Big Bang Theory',
'Walking Dead', 'Agents Of Shield', 'Blue Planet 2', 'Legion', 'The Grand Tour', 'Band Of Brothers', 'Westworld'
'Sherlock', 'The Punisher', 'True Detective', 'Daredevil', 'Luke Cage', 'Jessica Jones', 'Iron Fist', 'Stranger Things',
'Rick and Morty', 'House of Cards', '13 Reasons Why', 'House MD', 'Castle', 'Doctor Who', 'Dexter', 'Suits'
]
def word_jumble(word):
letters = list(word)
shuffle(letters)
return "".join(letters)
def sentence_jumble(w):
words = w.split()
shuffle(words)
return " ".join(word_jumble(word) for word in words)
def start_game():
global jumble
guess.focus_set()
jumble = jumble_list.pop()
word.config(text="Jumbled Words => " + jumble[JUMBLED])
def score_game(event):
global score
if guess.get().lower() == jumble[PLAINTEXT].lower():
guess.delete(0, END)
score += 1
score_display.config(text=str(score))
if jumble_list:
score_display.after(500, start_game)
else:
main.unbind('<Return>')
shuffle(tv_shows)
jumble_list = [(sentence_jumble(title), title) for title in tv_shows]
score = 0
jumble = None # a tuple with (jumbled, plaintext)
main = Tk()
main.title("Guess What")
main.geometry("375x200")
Label(main, text="Guess the TV show name from the jumbled one shown").pack()
word = Label(main)
word.pack()
score_display = Label(main)
score_display.pack()
score_display.config(text=str(score))
guess = Entry(main)
guess.pack()
guess.focus_set()
main.bind('<Return>', score_game)
start_game()
main.mainloop()
Вам нужно будет добавить обратно в конце игрового сценария. Вы можете ограничить количество раундов, усечив jumble_list
.