检查if语句中的字符串

时间:2015-09-06 17:41:27

标签: python string input int

我有一个带有一些用户输入的程序,我需要检查用户输入的是字符串还是1到1000万之间的整数值。

我的代码看起来像这样(简化):

while True:
    inp = raw_input("Enter a value between 1 and 10 million: ")
    if inp < 1:
        print "Must be higher than 1"
        continue
    elif inp > 10.000.000:
        print "Must be less than 10.000.000"
        continue
    elif 'inp is a string':                           #here's my problem
        print "Must be an integer value!"
        continue
    else:
        'execute the rest of the code'

我不知道如何解决这个问题。当我错误输入字符串时,我的程序总是终止。

谢谢!

3 个答案:

答案 0 :(得分:2)

首先,您正在使用Python 2,它会愉快地将字符串与整数进行比较。你不想这样做。其次,raw_input()始终返回一个字符串。您希望做的是检查该字符串是否可能代表一个数字。第三,10.000.000是不正确的语法。不要使用分隔符。第四,如果你想早点转到早期的循环顶部,你只需要continue。如果循环结束时所有内容都在if..elif..else块中,则只会执行其中一个,因此您不需要在每个结尾处放置一个continue科。您可以使用continue语句或重组您的分支。最后,不要将in用作变量名称,因为它是Python关键字。

while True:
    inp = raw_input("Enter a value between 1 and 10 million: ")

    if not inp.isdigit():
        print "Must be an integer value!"
        continue # each of these continue statements acts like a "failed, try again"

    inp = int(inp)

    if inp < 1:
        print "Must be higher than 1"
        continue # same for this one

    if inp > 10000000:
        print "Must be less than 10.000.000"
        continue # and this one

    # execute the rest of the code

答案 1 :(得分:1)

您可以使用.isdigit()检查字符串是否由数字组成,以确保它可以转换为整数:

while True:
    in = raw_input("Enter a value between 1 and 10 million: ")
    if in.isdigit():
        number = int(in)
        if number < 1:
            print "Must be higher than 1"
            continue
        elif number > 10**6:
            print "Must be less than 10.000.000"
            continue
       else:
           'execute the rest of the code'
    else:
        print "Must be an integer value!"
        continue

答案 2 :(得分:0)

我不知道你是如何提出你的代码的,但这里有不同的建议:

不要使用“in”作为变量名,因为它是一个python操作符。

输入后,您可以检查它是int还是字符串。

您的程序可能如下所示:

while True:    
    try:
        input_int = int(raw_input("Enter a value between 1 and 10 million: "))
        if  input_int < 1 :
            print "Must be higher than 1"
        elif input_int > 10**7:
            print "Must be less than 10.000.000"
    except:
        print "Must be an integer value!"
    else: #You can use else with try/except block
        #'execute the rest of the code'