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

时间:2016-12-26 04:52:11

标签: python

我试图完成一个程序,该程序将确定一个数字是否为素数而不是。我试图添加一段代码来验证用户输入是否都是整数,如果是,那么它是否为正整数。我希望它同时检查这两个,因为之前我检查它是否是一个整数,然后检查数字是否为正,但如果有人在第二次尝试时输入了一个字符串,则会导致错误。我的代码如下:

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

4 个答案:

答案 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