艰难地学习 Python,EX35。为什么大于 10 的数字返回 true?

Jim*_*mbo 1 python logic

所以我刚刚完成了练习 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)

sco*_*ttt 5

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 代码时。