Python中的原始输入

Python中的原始输入,python,raw-input,Python,Raw Input,我正在学习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 ta

我正在学习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!")
def gold_room():
打印“这间屋子里满是金子,你要多少钱?”
选择=原始输入(“>”)
如果选项中的“0”或选项中的“1”:
多少=整数(选择)
其他:
死亡(“伙计,学着打一个数字。”)
如果多少小于50:
打印“很好,你不贪婪,你赢了!”
出口(0)
其他:
死了(“你这个贪婪的混蛋!”)
在此代码中,第一行代码计算
=
符号的右侧,即在显示文本
时从用户处获取输入。一旦输入完毕,将其存储在名为
choice
的变量中

然后,如果选项中的“0”或选项中的“1”,则这一行
使用了一种称为
成员身份的东西,这意味着它测试给定对象中是否存在某个字符串、数字或任何其他对象。在这种情况下,由于
raw_input
总是返回一个字符串,而不管用户输入的是数字还是列表,如果您必须检查数字是否在字符串中,那么您不必在choice中执行
0
,而是在choice中执行
'0',这只是说,“用户提供的输入中是否有'0'”,如果是,然后,它将用户提供的输入转换为一个整数,然后将其分配给一个名为“how_money”的变量

此外,如果您希望从用户处仅获取一个整数,然后查看它是0还是1,我建议您执行以下操作:

choice = int(raw_input("> "))
if choice == 0 or choice == 1:
    how_much = choice
此代码确保用户输入整数而不是字母;如果用户输入了字符串(不是所有数字),则带有的代码将引发错误。这是因为在第一行代码中,
int(raw_input(“>”)
,您告诉Python解释器将给定的输入转换为整数,但Python无法将
wefj6
wedf
324
等输入转换为整数,因为它们不是纯数字,因此会引发错误

在此代码中,第一行代码计算
=
符号的右侧,即在显示文本
时从用户处获取输入。一旦输入完毕,将其存储在名为
choice
的变量中

然后,如果选项中的“0”或选项中的“1”,则这一行
使用了一种称为
成员身份的东西,这意味着它测试给定对象中是否存在某个字符串、数字或任何其他对象。在这种情况下,由于
raw_input
总是返回一个字符串,而不管用户输入的是数字还是列表,如果您必须检查数字是否在字符串中,那么您不必在choice中执行
0
,而是在choice中执行
'0',这只是说,“用户提供的输入中是否有'0'”,如果是,然后,它将用户提供的输入转换为一个整数,然后将其分配给一个名为“how_money”的变量

此外,如果您希望从用户处仅获取一个整数,然后查看它是0还是1,我建议您执行以下操作:

choice = int(raw_input("> "))
if choice == 0 or choice == 1:
    how_much = choice

此代码确保用户输入整数而不是字母;如果用户输入了字符串(不是所有数字),则带有的代码将引发错误。这是因为在第一行代码中,
int(raw_input(“>”)
,您告诉Python解释器将给定的输入转换为整数,但Python不能将
wefj6
wedf
324
等输入转换为整数,因为它们不是纯数字,因此,它将引发一个错误。

中的
一词是Python中的运算符。它测试它的左参数是否包含在右参数中。对于字符串(同时是
“0”
选项
),它执行子字符串检查

因此,choice
中的
“0”测试
选项
字符串是否包含一个或多个零。对于
“1”
,也会执行相同的操作。因此,选项中的测试
“0”或选项中的“1”将测试用户输入中是否存在
“0”或
“1”

那是一个相当愚蠢的测试。它将拒绝像
“23”
这样的输入,并尝试将像
“foo0baz”
这样的无意义转换为整数(并因异常而失败)

更好的测试是
str.isdigit
,它测试字符串中的所有字符是否都是十进制数字(0-9):

这种提前测试输入的习惯用法在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是否更好是一个判断问题。有时,一种风格明显比另一种更短或更容易理解,但在很多时候,两者都可以发挥作用。Python程序员倾向于选择EAFP,只要EAFP不明显比LBYL差,但没有硬性规定。了解如何使用这两种习惯用法编程很重要。

中的
一词是Python中的运算符。它测试它的左参数是否包含在右参数中。对于字符串(同时是
“0”
选项
),它执行子字符串检查

因此,choice
中的
“0”测试
选项
字符串是否包含一个或多个零。对于
“1”
,也会执行相同的操作。那么,测试呢
try:
    how_much = int(choice)
except ValueError: # user did not enter a valid integer
    dead("Man, learn to type a number.")