Kelthar
Kelthar

Reputation: 124

Python condition not applying (if/elif)

I have a problem with a condition in my python code. It's a mathematics application, and here's the part of the code that is not working well:

def askNumber():
    """Asks the number to test"""
    a=raw_input("Select the number to test (type 'exit' for leaving):")
    if len(a)!=0 and a.lower!="exit":
        try:
            b= int(a)
            processing(b)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            time.sleep(1)
            askNumber()
    elif len(a)!=0 and a.lower=="exit":
        answer()
    else:
        print "Your input can't be 'empty'"
        time.sleep(1)
        askNumber()

So, when in the raw_input for "a" I type "exit", the supposed condition to apply is the elif one but ends up applying the if one, ending up printing "Your input is not valid. Please enter a 'number'!" Sorry, if it's something obvious, I'm a begginer, although I tried to find the mistake several times.

Upvotes: 0

Views: 261

Answers (3)

Martijn Pieters
Martijn Pieters

Reputation: 1124558

You need to call the .lower() function.

if len(a) != 0 and a.lower() != "exit":
    # ...
elif len(a) != 0 and a.lower() == "exit":

There is no real need to test for len(a)!=0, simply test for a itself:

if a and a.lower() != "exit":
    # ...
elif a and a.lower() == "exit":

Empty strings evaluate to False in a boolean context.

Upvotes: 7

Mariano Anaya
Mariano Anaya

Reputation: 1296

You could change the condition for the following one:

   if a and a.lower() !="exit":
  # .....
   elif a and a.lower() == "exit":
      answer()
   elif a and not a.isdigit(): print "invalid input"
   else:
   #.............

Please note that yo don't need len(a) != 0 , just by using a will evaluate if it's empty or not.

Upvotes: 1

georg
georg

Reputation: 215029

Your program flow is a bit inside out, may I suggest some improvements?

def askNumber():
    """Asks the number to test"""

    while True:
        a = raw_input("Select the number to test (type 'exit' for leaving):")

        if not a:
            print "Your input can't be 'empty'"
            continue

        if a.lower() == "exit":
            answer()
            break

        try:
            b = int(a)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            continue

        processing(b)

Actually, the not a branch can be eliminated as well (empty inputs will be handled in except).

Upvotes: 3

Related Questions