[英]raw_input in Python
我正在阅读有关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!")
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 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#
类的输入转换为整数因为它们不是纯数字,所以会引发错误。
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.")
这种习惯于提前测试输入的习惯用法在Python圈子中被称为“跨越式学习”(LBYL)。 在C语言这类没有良好异常处理的语言中,这是很常见的。
另一种方法是简单地尝试进行转换,然后在输入无效的情况下捕获引发的任何异常:
try:
how_much = int(choice)
except ValueError: # user did not enter a valid integer
dead("Man, learn to type a number.")
这种编程风格被称为“比权限更容易获得宽恕”(EAFP),并且在Python编程中通常比LBYL更为流行,因为我们的异常快速且易于使用。
在给定的情况下,LBYL还是EAFP更好,这是一个判断问题。 有时,一种样式显然比另一种样式更短或更容易理解,但是很多时候,任何一种样式都可以工作。 只要不明显比LBYL更糟糕,Python程序员就倾向于EAFP,但是并没有硬性规定。 重要的是要知道如何使用这两种习语进行编程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.