2017-10-19 2 views
1

Je ne sais pas pourquoi cela ne fonctionne pas, j'ai regardé et je ne peux pas voir ce qui ne va pas, je l'ai embêté pendant un moment tout ce que je veux, c'est que ça marche . obtient sorties d'entrée un nombre égal à généré au hasard si nombre total est égal au hasard, alors vous gagnez, mais il se bloque juste au moment où je presse le boutonprogramme se bloque lorsque appuyez sur le bouton - Nombre devinez jeu - Tkinter

from tkinter import * 
from tkinter import ttk 
import random 
master = Tk() 
master.title('Guess The Number!') 
global answer 
global guess_entry 
global guess_display 
answer = str(random.randint(1000,9999)) 
guess_counter = 0 
def callback(): 
    print('Button pressed') 
    counter = 0 

    correct = [] 
    while counter < 4: 
     if guess_entry.get() == answer: 
      correct.append('Well done, that is correct') 
      break 
     elif guess_entry.get()[counter] == answer[counter]: 
      correct.append(guess_entry.get[counter]) 

      counter += 1 
    guess_display['text'] = ' '.join(str(correct)) 

def Help(): 
    win = Toplevel() 
    win.title('Help') 

    l = Label(win, text="Guess a 4 digit number and I will tell you\n what you got right,\n keep trying until you get it in the \ncorrect order with correct numbers") 
    l.grid(row=0, column=0) 

    b = Button(win, text="Okay", command=win.destroy) 
    b.grid(row=1, column=0) 

guess_entry = Entry(master) 

guess_check = Button(master, text='Guess', command=callback) 

guess_display = Label(master,text='_ _ _ _') 


help_button = ttk.Button(master, text="?", command=Help,width=3) 

guess_entry.grid(row=0,column=2) 
guess_check.grid(row=1,column=2) 

guess_display.grid(row=2,column=1) 

help_button.grid(row=0,column=4) 
master.mainloop() 
+0

Votre boucle while semble inutile. À aucun moment de la boucle, l'utilisateur n'a la possibilité d'entrer des données. 'guess_entry.get()' va retourner exactement la même chose à chaque itération de la boucle. –

+0

@BryanOakley ils n'ont pas besoin d'entrer quoi que ce soit une vérification pour voir les chiffres qui sont égaux. – Catmantj

+0

@BryanOakley Oakly et le guess_entry.get() je suppose que vous voulez dire le 'si guess_entry.get() == answer:' c'est-à-dire de vérifier si le nombre entier est correct et pas seulement – Catmantj

Répondre

0

Si les chiffres ne sont pas égaux pour la première fois à travers la boucle, ils ont gagné Etre égal à tout autre moment dans la boucle puisque l'utilisateur n'aura pas la chance de changer sa réponse pendant que la boucle est en cours d'exécution.

Vous pouvez voir cela en ajoutant une instruction d'impression:

while counter < 4: 
    print("counter:", counter, "guess:", guess_entry.get()) 
    ... 
+0

Ok, je vois ce que vous voulez dire maintenant, mais je ne comprends toujours pas pourquoi il plante – Catmantj

+0

@Catmantj: il est "crash" parce que la boucle ne sort jamais, jamais, jamais. –