Reputation: 16194
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
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
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
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