IndexError:列表索引超出范围 - 测验

时间:2015-12-04 19:01:26

标签: python

我正在python中编写西班牙语测验,当用户在测验中输入错误答案时,我遇到了问题。

import random

def create_dictionary(filename):
   dictionary = {} 

   file = open(filename)  
   for line in file:

       line = line.replace('\n','')

       split = line.split(':') 
       spanish_words = split[1].split(',')
       dictionary[split[0]] = spanish_words 

   file.close()
   return dictionary

def main():

   dictionary = create_dictionary('project13_data.txt')

   print (dictionary)

   questions = int(input("How many questions do you want to be quizzed on? "))
   final = questions
   wrong = []

   while questions > 0:

       def good_guess():
           if val == answer[0] or answer[1]: 
               print("Correct\n")
           else:
               print("Wrong\n")
               wrong.append(find)


    find = random.choice(list(dictionary.keys()))
    answer = dictionary[find][0:2]

       print(find)
       print(answer)

       print("What is" ,find, "in spanish? ")
       val = input("Answer: ")
       good_guess() 

       questions = questions - 1

   print("You got", len(wrong), "wrong out of", final)
   print(list(wrong))
main()

我得到的错误是

File "C:\Python34\Project 13 take 2.py", line 33, in good_guess if val == answer[0] or answer[1]: IndexError: list index out of range

如果用户输入正确的答案,代码运行正常,但否则我收到错误。我不知道为什么我会收到此错误,我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为你的直接问题是当你到达那行代码时没有定义回答找不到,下面几行。这些变量属于外部范围。你应该将它们作为参数传递给函数。

您可能无法将内置名称拆分文件重新定义为本地变量。

为什么每次在循环循环时重新定义 good_guess 功能?我认为这应该放在主要的顶部,或者可能在它之前 - 如果你已经设置了答案并找到了参数。

顺便说一下,你使用回答[0] 在Python 2.7中是合法的。

答案 1 :(得分:-1)

与您的错误无关,if val == answer[0] or answer[1]:不会以这种方式运作。

Python会评估val == answer[0]并返回TrueFalse。根据获得的值,它将评估bool(answer[1]),如果它是空字符串,空列表或0,则返回False,否则将True

相反,请使用if val == answer[0] or val == answer[1]或更好:
if val in [answer[0], answer[1]]: