在Python中同时验证原始输入是否为整数且大于零

Validating whether raw input is an integer and greater than zero simultaneously in Python

我正在尝试完成一个程序来确定一个数字是否是素数。我试图添加一段代码,验证用户输入是否同时是一个整数,如果是的话,验证它是否是一个正整数。我希望它同时检查这两个参数,就像以前一样,我让它先检查它是否为整数,然后检查数字是否为正数,但是如果有人在第二个参数上输入了一个字符串,则会导致错误。我的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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循环告诉用户他们的输入无效,然后再次请求输入。有什么想法吗?谢谢!

编辑:如果我输入一个字符串,我会得到以下内容:

1
2
3
4
5
6
7
>>> 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


您必须使用raw_input()而不是input(),因为python 2中的input()试图将输入的文本作为python代码执行。当您输入abcd时,它试图在代码中找到变量abcd,您会得到错误。


使用原始输入(

1
2
3
no  = raw_input("Enter a positive integer number")
if no.isdigit() and int(no) >= 0:
    print"positive no"

使用输入()。

1
2
3
no = input("Enter a positive integer number")
if str(no).isdigit() and no >= 0:
    print"positive no"


1
2
3
4
5
6
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


可以使用函数isdigit检查字符串。函数返回True是否仅由数字组成:

1
2
3
4
>>> '123'.isdigit()
True
>>> '123qwe'.isdigit()
False