我试图完成一个程序,该程序将确定一个数字是否为素数而不是。我试图添加一段代码来验证用户输入是否都是整数,如果是,那么它是否为正整数。我希望它同时检查这两个,因为之前我检查它是否是一个整数,然后检查数字是否为正,但如果有人在第二次尝试时输入了一个字符串,则会导致错误。我的代码如下:
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
答案 0 :(得分:2)
您必须使用raw_input()
而不是input()
,因为Python 2中的input()
会尝试将输入的文本作为Python代码执行。当您输入abcd
时,它会尝试在代码中找到变量abcd
,但您会收到错误。
答案 1 :(得分:1)
if not value.isdigit():
print("This is not an integer, try again.")
elif int(value) < 0:
print("The integer must be positive, try again.")
else:
break
答案 2 :(得分:1)
使用raw_input()
no = raw_input("Enter a positive integer number")
if no.isdigit() and int(no) >= 0:
print "positive no"
使用输入()
no = input("Enter a positive integer number")
if str(no).isdigit() and no >= 0:
print "positive no"
答案 3 :(得分:0)
您可以使用函数isdigit
来检查字符串。函数返回True
是否仅由数字组成:
>>> '123'.isdigit()
True
>>> '123qwe'.isdigit()
False