简体   繁体   中英

quiz in tkinter, Index out of range

I have a project, that currently will only ask 1 question and then break, giving me the message:

IndexError: list index out of range

the error is on line 42 which is:

label.config(text=question[q]).

Here is the code:

from tkinter import *
import tkinter as tk

q = -1
count = 0
correct = 0
incorrect = 0

question=["File compression software is an example of.. software", "Each piece of hardware e.g printer, monitor, keyboard, will need an up to date... installed", "application softwares control the computer, true or false?"]
answer = ["utility", "driver", "false"]
answer_cap = ["Utility","Driver","False"]
root = Tk()

name = tk.Label(root,text = "Computing quiz")
name.pack()

label = tk.Label(root,text = question[0])
label.pack()

entry = tk.Entry(root)
entry.pack() 

def out():
    global q,correct,incorrect,count
    while count < len(question):
          ans = entry.get()
          if answer[q] == ans or answer_cap[q] == ans :
              q+=1
              entry.delete(0, END)
              correct+=1
              print(correct)
              label.config(text=question[q])
          else:
              q+=1
              entry.delete(0, END)
              incorrect+=1
              print(incorrect)
              label.config(text=question[q])

    entry.delete(0, END)
    label.config(text = "Correct: "+str(correct) + " Incorrect:   "+str(incorrect))

    print(correct)

def stop():
    global q,correct,incorrect
    q = 0
    correct = 0
    incorrect = 0
    entry.delete(0, END)
    label.config(text = question[0])

button = tk.Button(root,text = "Submit",command = out)
button.pack()

button_two = tk.Button(root,text = "Restart",command = stop)
button_two.pack()

Look at your while loop. You are doing something while count < ... , but inside the loop count is not updated, but q is. Because of this q will be very very big soon, so it will be much higher then the len(question) . No wonder the IndexError

You have to correct that loop, because even if you deal with the IndexError the while loop will run forever.

A workaround (I do not suggest this, in my opinion you should just correct the whole while loop) could be to except the IndexError and break out of the loop

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM