我正在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
如果用户输入正确的答案,代码运行正常,但否则我收到错误。我不知道为什么我会收到此错误,我该怎么做才能解决这个问题?
答案 0 :(得分:0)
我认为你的直接问题是当你到达那行代码时没有定义回答。 找不到,下面几行。这些变量属于外部范围。你应该将它们作为参数传递给函数。
您可能无法将内置名称拆分和文件重新定义为本地变量。
为什么每次在循环循环时重新定义 good_guess 功能?我认为这应该放在主要的顶部,或者可能在它之前 - 如果你已经设置了答案并找到了参数。
顺便说一下,你使用回答[0] 在Python 2.7中是合法的。
答案 1 :(得分:-1)
与您的错误无关,if val == answer[0] or answer[1]:
不会以这种方式运作。
Python会评估val == answer[0]
并返回True
或False
。根据获得的值,它将评估bool(answer[1])
,如果它是空字符串,空列表或0,则返回False
,否则将True
。
相反,请使用if val == answer[0] or val == answer[1]
或更好:
if val in [answer[0], answer[1]]:
。