所以我刚刚完成了练习 35 以艰难的方式学习 Python http://learnpythonthehardway.org/book/ex35.html
下面的函数来自那个练习。我意识到仅通过检查“next”是“0”还是“1”而不是任何数字(通过使用 .isdigit() 或类似的)来检查它是有缺陷的,这会导致任何大于 1 但小于 1 的输入错误超过 10。
然而,输入 10 或更大似乎工作正常。例如,如果我输入显然不是“0”或“1”的“13”,那么这个语句“如果下一个为“0”或下一个为“1”:”返回真,这怎么可能?
def gold_room(): print "这个房间装满了黄金。你要多少钱?"
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
else:
dead("Man, learn to type a number.")
if how_much < 50:
print "Nice, you're not greedy, you win!"
exit(0)
else:
dead("You greedy bastard!")
Run Code Online (Sandbox Code Playgroud)
raw_input()返回一个字符串。该表达式'0' in string or '1' in string执行两次子字符串搜索。'1' in '9999'将评估为False因此数字 >= 10 也可能无法通过该测试。
该练习试图告诉您,您需要检查返回的字符串raw_input()是否采用合法的数字表示法,并从中获取一个int值:
尝试:
how_much = int(next)
除了值错误:
dead("伙计,学习输入数字。")
注意:记住哪种操作可能引发哪些异常是学习 Python 时的一个重要主题。大多数教程都没有足够强调这一点。初学者要记住:
int('x') 会提高 ValueError{}['KEY'] 会提高 KeyError[][0] 会提高 IndexError在编写任何将字符串转换为数字或使用列表或字典的 Python 代码时。