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

标签 python logic

所以我刚刚完成了关于艰难地学习 Python 的练习 35 http://learnpythonthehardway.org/book/ex35.html

下面的函数来自那个练习。我意识到仅通过检查“下一个”是“0”还是“1”而不是任何数字(通过使用 .isdigit() 或类似方法)是有缺陷的,这会导致任何大于 1 但小于 1 的输入出错超过 10 个。

然而,10 或更大的输入似乎工作正常。例如,如果我输入显然不是“0”或“1”的“13”,则此语句“如果下一个是“0”或下一个是“1”:”返回真,这怎么可能?

def gold_room(): 打印“这个房间里满是金子。你拿了多少?”

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!")

最佳答案

raw_input() 返回一个字符串。表达式 '0' in string or '1' in string 执行两个子字符串搜索。 '1' in '9999' 将评估为 False 因此数字 >= 10 也可能无法通过该测试。

这个练习试图告诉你,你需要检查 raw_input() 返回的字符串是合法的数字符号,并从中获取一个 int 值:

try:
    how_much = int(next)
except ValueError:
    dead("Man, learn to type a number.")

注意:记住哪种操作可能引发哪些异常是学习 Python 时的一个重要主题。大多数教程都没有足够强调这一点。初学者会想记住:

  • int('x') 会引发 ValueError
  • {}['KEY'] 会引发 KeyError
  • [][0] 会引发 IndexError

编写任何将字符串转换为数字或使用列表或字典的 Python 代码时。

关于python - 艰难地学习 Python,EX35。为什么大于 10 的数字返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418588/

相关文章:

c++ - 用最少/一行代码更新一维数组的多个位置

Python 名称错误 : name is not defined for my script

python - 从 Pandas 数据帧创建边缘列表

python - sudo ipython - 如何使用 sudo 电源启动 ipython

python - 在 python 中使用 size() 在数据框中输出为零

ruby - 如何检查输入是否为整数?- Ruby

logic - 命题逻辑中的公式与格式良好的公式

python - 扭曲的逻辑错误

python - 使用 Whoosh 搜索和索引带连字符的单词

mysql在where子句中使用逻辑+组函数的无效使用