除了'try ... except'和'.isdigit()'之外还有其他方法来检查Python 2中的用户输入吗?

时间:2014-08-02 13:19:27

标签: python python-2.7

我目前正在尝试通过Learn Python The Hard Way学习Python 2.7,但对Study Drill 5 of Exercise 35.

有疑问

我正在看的代码是:

choice = raw_input("> ")
if "0" in choice or "1" in choice:
    how_much = int(choice)
else:
    dead("Man, learn to type a number.")

研究演习询问是否有更好的方法,而不是检查数字是否包含0或1,并查看int()如何为线索工作。

我显然希望能够接受用户在解除字符串时给出的任何数字,并且我理解int()raw_input()中的内容转换为数字。

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

choice = int(raw_input("> "))

if choice > 0:

搜索完SO后,我发现this answer提供了两种解决问题的方法,但此时书中没有提及try...except.isdigit()

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

3 个答案:

答案 0 :(得分:3)

您可以编写自己的is_digit函数

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

答案 1 :(得分:1)

所以,首先阅读what jonrsharpe linked to in the comments 接受try - except是最好的方法。

然后考虑一个整数意味着什么:

  • 一切都必须是一个数字(也没有小数点)

这就是你要检查的内容。您希望所有成为一个数字。

因此,对于represents_integer(string)函数:

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

请注意,check that is is one of 可能需要另一个循环,尽管有更快的方法。


最后,请考虑"",它不会在此方法(或GregS')中工作。

答案 2 :(得分:1)

由于您已经学习了集合,因此可以通过类似

的方式测试每个字符是否为数字
choice = choice.strip()
for d in choice:
    if d not in "0123456789":
        # harass user for their idiocy

how_much = int (choice)