我正在阅读有关Python的教程。我不确定以下代码块是什么意思。
choice = raw_input("> ")
if "0" in choice or "1" in choice:
how_much = int(choice)
我知道我要输入一定数量的黄金。但“0”和“1”是什么意思?有没有更好的方法呢?谢谢!
整个代码都在这里。
def gold_room():
print "This room is full of gold. How much do you take?"
choice = raw_input("> ")
if "0" in choice or "1" in choice:
how_much = int(choice)
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 :(得分:2)
choice = raw_input("> ")
if "0" in choice or "1" in choice:
how_much = int(choice)
在此代码中,第一行代码评估=
符号的右侧,即在显示文本>
时从用户处获取输入。获取该输入后,存储在名为choice
的变量中。
然后,这一行if "0" in choice or "1" in choice
使用名为membership
的东西,这意味着它会测试某个字符串或数字或任何其他对象是否存在于给定对象中。在这种情况下,由于raw_input
始终返回一个字符串,无论该人输入数字或列表,如果您必须检查该数字是否在字符串中,那么而不是0 in choice
,你做'0' in choice
只是说,“用户给出的输入中是否有'0'?”如果是,那么它将用户给出的输入转换为整数,然后将其分配给名为'how_much'的变量。
此外,如果您只想从用户那里获得一个整数,然后看看它是0还是1,我建议你做这样的事情:
choice = int(raw_input("> "))
if choice == 0 or choice == 1:
how_much = choice
此代码确保用户输入整数而不是字母;如果用户确实输入了一个字符串(不是所有数字),那么代码会引发错误。这是因为在第一行代码int(raw_input("> "))
中,您告诉Python解释器将给定的输入转换为整数,但Python无法转换wefj6
或wedf
之类的输入或324#
为整数,因为它们不是纯数字,因此会引发错误。
答案 1 :(得分:2)
单词in
是Python中的运算符。它测试它的左参数是否包含在右手参数中。对于字符串("0"
和choice
都是),它会进行子字符串检查。
因此,"0" in choice
会测试choice
字符串是否包含一个或多个零。对"1"
做了同样的事情。因此,测试"0" in choice or "1" in choice
会测试用户输入中是否有"0"
或"1"
。
这是一个相当愚蠢的考验。它将拒绝"23"
之类的输入,并尝试将类似"foo0baz"
的废话转换为整数(并以异常方式失败)。
更好的测试是str.isdigit
,它测试所有字符串中的字符是否为十进制数字(0-9):
if choice.isdigit():
how_much = int(choice)
else:
dead("Man, learn to type a number.")
这种提前测试输入的习惯用法被称为&#34; Look Before You Leap&#34; (LBYL)在Python圈子里。它在像C这样的语言中很常见,没有很好的异常处理。
另一种方法是简单地尝试转换,然后捕获在输入无效时引发的任何异常:
try:
how_much = int(choice)
except ValueError: # user did not enter a valid integer
dead("Man, learn to type a number.")
这种编程风格被称为“#34;比宽容更容易要求宽恕”#34; (EAFP)并且在Python编程中通常比LBYL更受欢迎,因为我们的例外是快速且易于使用。
LBYL或EAFP在特定情况下是否更好是一个判断问题。有时,一种风格明显比另一种风格更短或更容易理解,但很多时候任何一种风格都可以发挥作用。 Python程序员倾向于更喜欢EAFP,只要它不比LBYL差,但这并不是一个硬性规则。了解如何使用这两种习语进行编程非常重要。