2016-02-20 1 views
-2

У меня есть этот код для викторины, но появляется только первый вопрос. Я могу ответить на первый вопрос, и оценка будет соответствующим образом скорректирована, однако следующий вопрос никогда не появится. Я пробовал исследовать цикл через кортежи и играл с моим кодом, но безрезультатно. Я новичок в Python и буду признателен за помощь. Я потратил несколько часов на это, поверьте мне.Tuple looping (думаю)

from tkinter import * 

root = Tk() 
root.title("End of year exam") 

score = 0 

def submit_button_clicked(): 
    global score 
    global questions 

    score = 0 
    if answer.get() == questions[0][1]: 
     score+=1 
    else: 
     score = score 
    scoretxt.config(text = "Your score is: {}".format(str(score))) 


questions =[("What does 13 + 5 = ?","18"),("What does 12 + 8 = ?","20"),("What does 19 + 6 = ?","25"),("What does 17 + 15 = ?","32")] 

Label(root,text = "Question : ",bg ="light grey").grid(row = 0,column = 0, sticky = W) 
question=Label(root,bg = "light green",text= questions[1][0], width = 38) 
question.grid(row =1,column=0) 

Label(root,text = "Answer: ",bg = "light grey").grid(row = 2, column = 0, sticky = W) 
answer = Entry(root,bg ="white",width = 45, justify = CENTER) 
answer.grid(row = 3,column=0) 

scoretxt = Label(root,text ="Your score is:",bg = "light green", width = 38) 
scoretxt.grid(row = 10,column = 0, sticky = W) 

### make a submit button 
Button(root,text= "Submit",bg = "light grey",command = submit_button_clicked).grid(row = 4,column = 0, sticky = W) 

root.mainloop() 
+1

«появляется только первый вопрос» .. Хм, может быть, потому, что вы только делаете вопросы [1] [0] '? –

+0

Я знаю вопросы [1] [0], чтобы отобразить первый вопрос, но я не уверен, как изменить код, чтобы он отображал следующий вопрос, скажем, при нажатии кнопки отправки. – PythonNewbie

+0

Я не знаю, как изменить текст метки в Tkinter, но вы можете сохранить глобальную переменную, для которой вы задаете вопрос. Когда вы правильно ответите на вопрос, вы можете увеличить этот счетчик и сбросить текст на этикетке. –

ответ

0

Это должно сработать. Я добавил оператор try в функцию submit_button_clicked(), поэтому, если вопрос был последним, он все равно обновит счет. Если вы прочитаете код, вы увидите, что я изменил. Не позвольте мне, если вы этого не поймете. Хорошего дня!

from tkinter import * 

root = Tk() 
root.title("End of year exam") 

score = 0 

questions =[("What does 13 + 5 = ?","18"),("What does 12 + 8 = ?","20"),("What does 19 + 6 = ?","25"),("What does 17 + 15 = ?","32")] 

current_question = 0 

def submit_button_clicked(): 
    global score 
    global questions 
    global current_question 

    if answer.get() == questions[current_question][1]: 
     score += 1 
     current_question += 1 
     try: 
      question.config(text=questions[current_question][0]) 
     except: 
      pass 
     answer.delete(0, 'end') 
    scoretxt.config(text = "Your score is: {}".format(str(score))) 




Label(root,text = "Question : ",bg ="light grey").grid(row = 0,column = 0, sticky = W) 
question=Label(root,bg = "light green",text=questions[current_question][0], width = 38) 
question.grid(row =1,column=0) 

Label(root,text = "Answer: ",bg = "light grey").grid(row = 2, column = 0, sticky = W) 
answer = Entry(root,bg ="white",width = 45, justify = CENTER) 
answer.grid(row = 3,column=0) 

scoretxt = Label(root,text ="Your score is:",bg = "light green", width = 38) 
scoretxt.grid(row = 10,column = 0, sticky = W) 

### make a submit button 
Button(root,text= "Submit",bg = "light grey",command = submit_button_clicked).grid(row = 4,column = 0, sticky = W) 

root.mainloop() 
+0

Объяснение того, как ваш код отличается, сделает этот ответ более подходящим. Разве это, читатель должен сравнить ваш код по строкам с оригиналом, чтобы увидеть, что вы изменили. –

+0

Лично я не прочь пройти через код по строчке, чтобы найти различия, поскольку это помогает с моим пониманием, однако я мог видеть, что некоторые люди не хотят этого делать. Большое вам спасибо за вашу помощь. – PythonNewbie

+0

Если это решит вашу проблему, я был бы признателен, если бы вы приняли мой ответ. Благодаря! – MarkyPython