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

时间:2014-03-15 01:50:48

标签: python logic

所以我刚刚完成了“学习Python艰难之路”练习35 http://learnpythonthehardway.org/book/ex35.html

以下功能来自该练习。我意识到只检查" next"它是否有缺陷?是" 0"或者" 1"而不是任何数字(通过使用.isdigit()或类似),这会导致任何大于1但小于10的输入出错。

然而输入10或更高它似乎工作正常。例如,如果我输入" 13"这显然不是" 0"或" 1"这句话"如果" 0"在下一个或" 1"在下一个:"返回true,这怎么可能?

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

4 个答案:

答案 0 :(得分:4)

raw_input()返回一个字符串。表达式'0' in string or '1' in string执行两个子字符串搜索。 '1' in '9999'会评估为False,因此数字&gt; = 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代码时。

答案 1 :(得分:0)

next是一个被视为字符集合的字符串。 &#34; 13&#34;的第一个字符是&#34; 1&#34 ;;表达&#34; 1&#34; in&#34; 13&#34;是的。

答案 2 :(得分:0)

您正在进行字符串比较。 &#34; 1&#34;字符在&#34; 13&#34;中,因此评估为TRUE。你似乎在考虑int(next)== 1,这是一个数值比较,应该按照你的描述行事。

答案 3 :(得分:0)

我在以下代码中获取了gold_room函数的语法错误。 Zed挑战我们改变基本代码,但是我尝试添加特定结果会破坏程序。问题出现在&#34;如果how_much == 68:&#34; ...

def gold_room():
    print "This room is full of gold.  How much do you take?"

    choice = raw_input("> ")
    if choice.isdigit():
        how_much = int(choice)
    else:
        dead("Man, learn to type a number. But you can't, because you're dead.")

    if how_much == 68:
        print "Awwwww yea, you crazy."
    elif how_much < 50:
        print "Nice, you're not greedy, you win!"
        exit(0)
    else:
        dead("You greedy bastard!")