1

我正在尝试编写一个程序,其中用户输入一个两位整数,输出是第二位打印的第一个数字指示的次数。这是我到目前为止所拥有的:

number = input('Type two-digit integer \n')
a = int(number)//10
b = int(number)%10
if len(number) != 2:
    print(number, 'is not a two-digit integer')
else:
    print(a*str(b))

当我对此进行测试时,只要有人输入数字,它就会按照我的意图去做。如果有人输入 6r,则会弹出一条错误消息:

a = int(number)//10

ValueError: int() 以 10 为底的无效文字:'6r'

所以我会假设需要在代码的第二行添加一些东西来测试输入是否实际上是一个整数,我该怎么做?用不同的方式重写它会更好吗?请记住,我正在参加 Python 入门课程,这是我正在参加的练习中期的一个问题,所以如果我不得不在真正的中期回答这样的问题,我不能使用很多复杂的过程。

如果有人键入不是整数的东西,这是我尝试过的,但由于某种原因,我不知道它为非整数提供了与整数相同的消息,并且没有按我的意图运行:

number = input('Type two-digit integer \n')
if (isinstance(number, int)) == False:
    print(number, 'is not a two-digit integer')
elif len(number) != 2:
    print(number, 'is not a two-digit integer')
else:
    a = int(number)//10
    b = int(number)%10
    print(a*str(b))

帮助将不胜感激!

4

4 回答 4

4

这里最好的选择是捕获异常。出了点问题,而这正是异常旨在处理的内容:

try:
    ...
except ValueError:
    print("You need to enter an integer!")
    ...

Python 的口头禅是请求宽恕比请求许可更好,所以不要事先检查它是否有效,尝试一下,如果无效则处理问题。

这使得代码更可靠(检查可能会意外地禁止良好的输入,或者允许错误的输入),并使代码更好地阅读(您首先处理正常情况,然后处理问题,而不是必须检查问题,然后处理)。

于 2012-10-16T21:22:04.290 回答
2

这是try和的最佳时机except

try:
   val = int(number)
except ValueError:
   print("That's not a number...")
于 2012-10-16T21:22:09.300 回答
1

也许最简单的事情就是做number.isdigit()isdigit如果字符串中的所有字符都是数字,则返回 true,这意味着它是一个正整数。因此,您可以执行以下操作:

if not number.isdigit():
    print "You didn't enter an integer!"

请注意,使用 try/except 作为其他答案的建议将允许负整数,这可能对您的用例没有意义(您不能打印字符串 -2 次)。

问题是您并不真正想要“两位整数”,您想要一个由两位数字组成的字符串,您将把它用作两个单独的数字。

于 2012-10-16T21:22:08.843 回答
0

我会选择类似的东西:

number = re.match(r'(\d)(\d)', input('Typo two digit number:\n'))
if number is not None:
    print(int(number.group(1)) * number.group(2))
else:
    pass # something wasn't right...
于 2012-10-16T21:30:18.317 回答