我正在尝试编写一个程序,其中用户输入一个两位数的整数,输出是第二个数字打印的第一个数字所指示的次数。以下是我到目前为止的情况:
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:基数为10的int()的文字无效:'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))
非常感谢帮助!
答案 0 :(得分:4)
这里最好的选择是捕捉异常。出了问题,这就是设计要处理的异常:
try:
...
except ValueError:
print("You need to enter an integer!")
...
Python有的口号,请求宽恕而不是权限,所以不要事先检查它是否有效,尝试一下,如果它不起作用则处理问题。
这使得更可靠的代码(检查可能会意外地禁止良好的输入,或通过错误的输入),并使代码读取更好(首先处理正常情况,然后处理问题,而不是检查问题,然后处理)。
答案 1 :(得分:2)
这是try
和except
的完美时间:
try:
val = int(number)
except ValueError:
print("That's not a number...")
答案 2 :(得分:1)
也许最简单的事情就是做number.isdigit()
。如果字符串中的所有字符都是数字,isdigit
将返回true,这意味着它是一个正整数。所以你可以这样做:
if not number.isdigit():
print "You didn't enter an integer!"
请注意,使用try / except作为其他答案建议将允许负整数,这可能对您的用例没有意义(您不能打印字符串-2次)。
问题是你真的不想要“两位数整数”,你想要一个由两位数字组成的字符串,你将把它作为两个单独的数字使用。
答案 3 :(得分: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...