所以我刚刚完成了“学习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!")
答案 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!")