非常简单的错误,我已经有一段时间了,因为我似乎失踪了,这真的让我烦恼
studentspelling = input ('Spelling: ')
spellingnumber = y6wordlist.index(studentspelling)
if studentspelling == y6wordlist[spellingnumber]:
print ('Correct. Awarded 2 points.')
total = total + 2
else:
print ('Incorrect answer. Awarded no points.')
total = total
但是,当我尝试在拼写测试期间输入一个单词而不是分配给y6wordlist[spellingnumber]
的单词时,我收到此错误:
ValueError: 'dgfh' is not in list
现在显然我知道它不在列表中,但是我的代码都没有说它必须是,或者至少我不这么认为。我尝试过很多东西,比如使用'elif',但没有成功。我做错了什么想法?
答案 0 :(得分:1)
如果值不在列表中,index
方法将引发ValueError:
>>> a = [1,2,3]
>>> a.index(1)
0
>>> a.index(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 4 is not in list
>>>
您可以使用in
if word in mylist:
i = mylist.index(word)
# do something
else:
# do something different
答案 1 :(得分:1)
声明:
spellingnumber = y6wordlist.index(studentspelling)
如果单词不在列表中,将导致ValueError
**顺便说一句,如果你提出错误,你会自动知道这个词不对**
您可以使用:
try:
spellingnumber = y6wordlist.index(studentspelling)
# and you could just go straight to this
print ('Correct. Awarded 2 points.')
total = total + 2
except ValueError:
print ('Incorrect answer. Awarded no points.')
或类似的东西
答案 2 :(得分:0)
index()
)不在列表中时, ValueError
会引发studentspelling
。
如果您有(或创建)跟踪当前问题的变量,那么我认为您打算写一下:
current_question = 0
student_spelling = input ('Spelling: ')
if student_spelling == y6wordlist[current_question]:
print ('Correct. Awarded 2 points.')
total = total + 2
else:
print ('Incorrect answer. Awarded no points.')
total = total
current_question = current_question + 1
这样做:给出当前问题/单词的拼写。然后,在current_question
中的y6wordlist
位置查找正确拼写的单词,看看它是否与student_spelling
相同。如果是这样,那么学生拼写正确的单词,否则不拼写。
答案 3 :(得分:0)
列表数据结构的文档显示:
list.index(x):返回第一个项目列表中的索引 值是x。如果没有这样的项目,则会出错。
由于您更倾向于测试成员身份,而不是获取可能不存在的值的索引号,您可能会这样做:
if studentspelling in y6wordlist
或者,您也可以使用try / catch块:
try:
spellingnumber = y6wordlist.index(studentspelling)
print ('Correct. Awarded 2 points.')
total = total + 2
except ValueError:
print ('Incorrect answer. Awarded no points.')
total = total