除了';尝试…除了';和';。isdigit()';在Python2中检查用户输入?

除了';尝试…除了';和';。isdigit()';在Python2中检查用户输入?,python,python-2.7,Python,Python 2.7,我目前正试图通过via学习Python 2.7,但有一个关于 我看到的代码是: choice = raw_input("> ") if "0" in choice or "1" in choice: how_much = int(choice) else: dead("Man, learn to type a number.") 研究练习询问是否有比检查数字是否包含零或一更好的方法,并查看int()如何工作以获得线索 显然,我希望能够接受用户给定的任何数字,同时忽略字符串

我目前正试图通过via学习Python 2.7,但有一个关于

我看到的代码是:

choice = raw_input("> ")
if "0" in choice or "1" in choice:
    how_much = int(choice)
else:
    dead("Man, learn to type a number.")
研究练习询问是否有比检查数字是否包含零或一更好的方法,并查看
int()
如何工作以获得线索

显然,我希望能够接受用户给定的任何数字,同时忽略字符串,并且我知道
int()
会将
raw\u input()
中给出的内容转换为数字

因此,我尝试了几种修改if语句的方法,在键入字符串时会出现致命错误,但很难找到合适的方法。我尝试了以下代码的变体,现在了解了它们为什么不起作用:

choice = int(raw_input("> "))

if choice > 0:
在搜索之后,我发现这提供了两种解决问题的方法,但是,
尝试……除了
。isdigit()
在这一点上并没有在书中提到

有没有其他方法可以实现获取用户输入,必要时将其转换为整数,如果不适合本书的这一阶段,则返回错误?

因此,首先阅读并接受
try
-
除外
是最好的方法

然后考虑作为整数意味着什么:< /P>

  • 所有内容都必须是数字(也不能是小数点)
这就是你要检查的。你希望一切都是数字

因此,对于
表示整数(字符串)
函数:

for every letter in the string:
    check that it is one of "0", "1", "2", ..., "9"
    if it is not, this is not a number, so return false

if we are here, everything was satisfied, so return true
请注意,作为
之一的
检查可能需要另一个循环,尽管有更快的方法


<>最后,考虑<代码>” >,在这个方法(或GRGS)中不起作用。

< P>所以,首先读取和接受<代码>尝试< /COD> >代码>除< /C> >是最好的方式。

然后考虑作为整数意味着什么:< /P>

  • 所有内容都必须是数字(也不能是小数点)
这就是你要检查的。你希望一切都是数字

因此,对于
表示整数(字符串)
函数:

for every letter in the string:
    check that it is one of "0", "1", "2", ..., "9"
    if it is not, this is not a number, so return false

if we are here, everything was satisfied, so return true
请注意,作为
之一的
检查可能需要另一个循环,尽管有更快的方法



最后,考虑<代码>“<代码> >,在这个方法(或GRGS)中不起作用。

< P>既然你已经学会了SET,你可以通过像

之类的东西来测试每个字符是一个数字。
choice = choice.strip()
for d in choice:
    if d not in "0123456789":
        # harass user for their idiocy

how_much = int (choice)

因为您已经学习了集合,所以可以通过以下方式测试每个字符是否都是一个数字

choice = choice.strip()
for d in choice:
    if d not in "0123456789":
        # harass user for their idiocy

how_much = int (choice)

您可以编写自己的is_数字函数

def my_digit(input):
  digits = ['0','1','2','3','4','5','6','7','8','9']
  for i in list(input):
    if not i in digits:
       return False
  return True

您可以编写自己的is_数字函数

def my_digit(input):
  digits = ['0','1','2','3','4','5','6','7','8','9']
  for i in list(input):
    if not i in digits:
       return False
  return True

我想你可以用
ord(…)
查找ascii码你是在检查输入是0还是1,还是所有输入都包含数字?我认为没有比用
.isdigit()
检查输入更好的方法了。另外,请注意'foo0'中的
0
@padraiccanningham:该检查是在对输入应用
int()
之前,尝试查看输入是否类似于整数。显然,它将接受无效输入“10XRw”,并拒绝有效输入“345”。所以这个问题要求用户想出更好的方法。我想你可以用
ord(…)
查找ascii码。你是在检查输入是0还是1,还是所有输入都包含数字?我认为没有比用
.isdigit()
检查输入更好的方法了。相关:。另外,请注意'foo0'中的
0
@padraiccanningham:该检查是在对输入应用
int()
之前,尝试查看输入是否类似于整数。显然,它将接受无效输入“10XRw”,并拒绝有效输入“345”。因此,这个问题要求用户想出更好的方法。因为您明确地这样做是为了学习Python,所以我尝试保留这个伪代码。如果不成功,请告诉我编辑:格雷格基本上拥有代码我的问题不是基于“尝试除外”是否是最好的方式。我理解这是最好的方式,但目前文本中还没有介绍try语句,因此对于我这个学习者来说,“try-except”并不存在。不管怎样,我喜欢这个答案,谢谢。@tomdot是的,我只是想确定:)。因为您明确地这样做是为了学习Python,所以我尝试保留这个伪代码。如果不成功,请告诉我编辑:格雷格基本上拥有代码我的问题不是基于“尝试除外”是否是最好的方式。我理解这是最好的方式,但目前文本中还没有介绍try语句,因此对于我这个学习者来说,“try-except”并不存在。不管怎样,我喜欢这个答案,谢谢。@tomdot是的,我只是想确定:)。