【发布时间】:2016-12-26 04:52:10
【问题描述】:
我正在尝试完成一个程序,该程序将确定一个数字是否是素数。我正在尝试添加一段代码来验证用户输入是否既是整数,如果是,它是否是正整数。我希望它同时检查这两个,就像以前我先检查它是否是整数,然后检查数字是否为正数,但如果有人在第二次尝试时输入了一个字符串,则会导致错误。我的代码如下:
import math
def is_prime(integer):
if integer < 2:
return False
elif integer == 2:
return True
elif not integer & 1:
return False
for x in range(3, int(integer**0.5) + 1, 2):
if integer % x == 0:
return False
return True
while True:
value = input("Please enter a positive integer: ")
try:
integer = int(value)
if integer >= 0:
break
else:
print("The integer must be positive, try again.")
except ValueError:
print("This is not an integer, try again.")
if is_prime(integer) == False:
print "%d is not a prime number." % integer
if is_prime(integer) == True:
print "%d is a prime number!" % integer
我正在尝试使用 while 循环告诉用户他们的输入无效,然后再次请求输入。有任何想法吗?谢谢!
编辑:如果我输入一个字符串,我会得到以下信息:
>>> python ex19.1.py
Please enter a positive integer: abcd
Traceback (most recent call last):
File "ex19.1.py", line 16, in <module>
value = input("Please enter a positive integer: ")
File "<string>", line 1, in <module>
NameError: name 'abcd' is not defined
【问题讨论】:
-
什么错误?始终在问题中添加 FULL 错误消息(Traceback)。可能我们可以解决仅看到错误消息的问题,但现在我们不能。 (而且我们懒得运行这段代码)。
-
您的做法是绝对正确的,其他所有方法都只能归结为这一点。除此之外,最好将
if is_prime(integer) == False替换为if is_prime(integer)并使用 if-else 而不是两个 if。
标签: python