user4856614
user4856614

Reputation:

Check for a string in if-statement

I have a program with some user inputs and I need to check if what the user entered was a string or an integer value between 1 and 10 million.

My code looks like this (simplified):

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'

I don't know how to solve this. My program always terminates when I enter a string by mistake.

Thank you!

Upvotes: 0

Views: 104

Answers (3)

YOBA
YOBA

Reputation: 2807

I have no idea how you came up with your code but here are different suggestions:

Don't use "in" as variable name because it's a python operator.

After the input you can check whether it is an int or a string.

Your program can look like this:

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'

Voilà

Upvotes: 0

TigerhawkT3
TigerhawkT3

Reputation: 49320

First, you're using Python 2, which will happily compare strings to integers. You don't want to do that. Secondly, raw_input() will always return a string. What you're hoping to do is check if that string could possibly represent a number. Third, 10.000.000 is improper syntax. Don't use separators. Fourth, you only need to continue if you want to go to the top of the loop early. If everything's in an if..elif..else block at the end of the loop, only one of those will be executed, so you don't need to put a continue at the end of each branch. You can use continue statements or restructure your branch. Finally, don't use in as a variable name, because that's a Python keyword.

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

Upvotes: 2

Ozgur Vatansever
Ozgur Vatansever

Reputation: 52093

You can use .isdigit() to check if string consists of numbers to make sure it can be convertible to integer:

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

Upvotes: 1

Related Questions