0

I have a program that takes input from the user. I want to display an invalid option message if the input is a string or it is not a number between 1 to 4. I want to check all these 3 conditions in a single if statement.

ask_option = input("Your option: ")

if int(ask_option) != int and (int(ask_option) < 1 or int(ask_option) > 4):
    print("Not a valid option")

I feel the int(ask_option) != int is incorrect. But is it possible to fulfill all these 3 in a single if statement?

My code fulfills the criteria to choose between 1-4 but doesn't work to check string input. Please help

user863975
  • 15
  • 6
  • I think you're expecting too much to handle all this in a single `if` statement. Just do the `int()` in its own statement within a try/except block to catch the case where the input wasn't numeric. – Mark Ransom Oct 19 '20 at 03:22

3 Answers3

4

input() will always return a string unless you explicity convert it. So using ask_option = int(input("Your option: ")) will already satisfy checking if ask_option is an integer as an exception will be raised otherwise.

As for evaluating the integer, you can accomplish this in a single line such as:

if not 1 <= ask_option <= 4:
   print("Not a valid option")
Teejay Bruno
  • 1,716
  • 1
  • 4
  • 11
1

If you try to convert string input into an int, the program will throw ValueError.

ask_option = input("Your option: ")

try:
   val = int(ask_option)
   if val <= 1 or val => 4:
    print("Not a valid option!")
except ValueError:
   print("Not a valid option!")
0
ask_option = input("Your option: ")
if len(ask_option) != 1 or ask_option < '1' or ask_option > '4':
    print("Not a valid option")
else:
    print( "valid option")

Edit:

OP: "I want to display an invalid option message if the input is a string or it is not a number between 1 to 4."

Therefore we need to accept values ranging from 1 - 4

We know that input() accepts everything as a string

so in the if statement

first condition: len(ask_option) != 1

We invalidate any string whose length is not equal to 1 ( since we need to accept values ranging from 1-4 which are of a length 1 )

And now we are left to deal with the input value whose length is just 1 which could be anything and will be checked with the next 2 conditions.

second and third condition: ask_option < '1' or ask_option > '4'

We do string comparison ( which is done using their ASCII values )

more on string comparison: String comparison technique used by Python

I would not recommend using this approach since it's hard to tell what it does on the first look, so it's better if you use try except instead as suggested in other answers.

See this solution as just a different approach to solve OP's problem ( but not recommended to implement. )

  • 1
    Although this piece of code might solve OP's problem, you should explain what id does exactly in a few words and how it is fixing the issue. – Zeitounator Oct 19 '20 at 07:38