Eden Crow
Eden Crow

Reputation: 16194

Python 3: Creating A Function For User Choice

I am trying to create a piece of code in Python 3 which allows the user to choose between several options. I have tried this several ways but none of them seem the right method to do so.

Example Attempt:

usr_input = input("Input: ")
while (usr_input != '1') | (usr_input != '2'):
    if usr_input == '1':
        search()
    elif usr_input == '2':
        sys.exit()

The problem with this is that the script hangs after entering an incorrect command.

Can anyone give me the correct way to do this?

Upvotes: 0

Views: 17175

Answers (3)

Daniel Roseman
Daniel Roseman

Reputation: 599758

There are a few things wrong here.

Firstly, you only get usr_input once, outside the loop. If it's not a correct choice, you don't give the user the change to correct their choice: you simply loop. You'll need to do the input within the loop.

Secondly, your boolean condition is wrong. It is the equivalent of saying "x is not a OR not b", which is always true, since even if it is a it is still not b. A better way of saying it is not in ['1', '2'].

Putting these together:

usr_input = ''
while usr_input not in ['1', '2']:
    usr_input = input("Input: ")
    ... etc... 

Upvotes: 3

Karl Barker
Karl Barker

Reputation: 11351

input() performs the equivalent of eval(raw_input()), so if your user inputs something syntactically incorrect, it will throw a SyntaxError exception. See the docs: http://docs.python.org/library/functions.html#input

You could improve your code by catching the SyntaxError and handling it, so it doesn't crash your program.

Upvotes: -1

Donald Miner
Donald Miner

Reputation: 39913

You want to use the while loop to keep asking for input when the user didn't input something properly. Inside of you while loop, usr_input never changes, so it just keeps looping.

You also have another issue: you should keep looping only if usr_input is not 1 AND is not 2. not 1 or not 2 is always true (if it is 2, it is not 1, and if it is 1 it is not 2).

usr_input = input("Input: ")
while (usr_input != '1') and (usr_input != '2'):
    usr_input = input("Input: ")

if usr_input == '1':
    search()
elif usr_input == '2':
    sys.exit()

Upvotes: 1

Related Questions