我目前正在尝试通过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()
。
是否有其他方法可以实现获取用户输入,必要时将其转换为整数,如果不适合本书的这一阶段则返回错误?
答案 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)