拼写测试检查不起作用(python)

时间:2013-12-18 20:13:04

标签: python

非常简单的错误,我已经有一段时间了,因为我似乎失踪了,这真的让我烦恼

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',但没有成功。我做错了什么想法?

4 个答案:

答案 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