Limiting user input to a range in Python

In the code below you'll see it asking for a 'shift' value. My problem is that I want to limit the input to 1 through 26.

 For char in sentence: if char in validLetters or char in space: #checks for newString += char #useable characters shift = input("Please enter your shift (1 - 26) : ")#choose a shift resulta = [] for ch in newString: x = ord(ch) #determines placement in ASCII code x = x+shift #applies the shift from the Cipher resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != \ ' ' else ch) # This line finds the character by its ASCII code 

How do I do this easily?

1

5 Answers

Another implementation:

shift = 0 while not int(shift) in range(1,27): shift = input("Please enter your shift (1 - 26) : ")#choose a shift 
1

Use a while loop to keep asking them for input until you receive something you consider valid:

shift = 0 while 1 > shift or 26 < shift: try: # Swap raw_input for input in Python 3.x shift = int(raw_input("Please enter your shift (1 - 26) : ")) except ValueError: # Remember, print is a function in 3.x print "That wasn't an integer :(" 

You'll also want to have a try-except block around the int() call, in case you get a ValueError (if they type a for example).

Note if you use Python 2.x, you'll want to use raw_input() instead of input(). The latter will attempt to interpret the input as Python code - that can potentially be very bad.

Try something like this

acceptable_values = list(range(1, 27)) if shift in acceptable_values: #continue with program else: #return error and repeat input 

Could put in while loop but you should limit user inputs so it doesn't become infinite

while True: result = raw_input("Enter 1-26:") if result.isdigit() and 1 <= int(result) <= 26: break; print "Error Invalid Input" #result is now between 1 and 26 (inclusive) 

Use an if-condition:

if 1 <= int(shift) <= 26: #code else: #wrong input 

Or a while loop with the if-condition:

shift = input("Please enter your shift (1 - 26) : ") while True: if 1 <= int(shift) <= 26: #code #break or return at the end shift = input("Try Again, Please enter your shift (1 - 26) : ") 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like