初来乍到,又学了3天编程。我目前正在学习Code Academy (Python),在一次自由支配的作业中,我决定写一些与作业无关的代码,只是为了测试我所学到的一些东西。下面是我到目前为止的代码:
guns = ["AWP", "SSG 08", "SG 553", "SCAR-20 ", "G3SG1", "AK-47"]
print guns
print "Of the above mentioned Rifles, which one is the most accurate in CS:GO?",
answer = raw_input()
answer_capitalize = answer.upper()
correct_answer = guns[0]
if answer_capitalize == correct_answer:
print "You are correct. The AWP is the most accurate weapon in CS:GO"
elif answer_capitalize == guns[1, 2, 3, 4, 5]:
print "I'm sorry. " + answer_capitalize + " is not correct. Please try again."
else:
print "You spelled your weapon choice incorrectly. Please try again."
下面是我得到的错误:Traceback(最近一次调用):文件"python",第11行,在TypeError:列表索引必须是整数,而不是元组
第11行是elif语句(这里的间距不同)
当输入'awp'时没有错误代码,但对于任何其他输入都会生成错误代码。
这段幼儿园级的小代码的目的是问一个问题,哪种武器是最准确的。如果他们回答awp,他们就答对了,如果他们选择了错误的武器,并且拼写正确,那么elif语句就开始发挥作用了。如果他们破坏了武器的拼写,或者输入了列表上的单词之外的任何内容,那么else语句就会发挥作用。另一个麻烦的地方是,它在收到输入后同时打印IF和ELIF语句。
我的下一步,我还没有讲到,是在他们猜错的情况下循环。我现在只是想把前半部分改对。
提前感谢您的帮助!
您的错误在这一行:
elif answer_capitalize == guns[1, 2, 3, 4, 5]:
你不能像这样引用列表项。
可以使用
elif answer_capitalize in guns: #First if catches the correct answer
列表不是这样的。
elif answer_capitalize == guns[1, 2, 3, 4, 5]:
语法错误。要获取列表的子列表,可以使用guns[1:5]
。但是,在您的情况下,直接进入要点并使用answer_capitalize != correct_answer
。为了更具体地解释"拼写错误",请使用answer_capitalize in guns
。
在guns
也包含小写项目的情况下,您想检查它是否在列表大小写中不敏感,您可以使用列表推导式将guns
转换为大写:guns_uppercase = [gun.upper() for gun in guns]
.
您可以使用类似于您在if
语句中使用的。
elif answer_capitalize != correct_answer:
print "I'm sorry. " + answer_capitalize + " is not correct. Please try again."
!=
表示不相等。
如前所述,没有简明的语法来获取非连续子列表。但是,您可以使用列表推导式:
elif answer_capitalize in [guns[i] for i in [1,2,3,4,5]]:
然而,可能这样做会更有效:
elif any(answer_capitalize==guns[i] for i in [1,2,3,4,5]):
elif answer_capitalize == [0 for guns in range(5)]: