2014-04-27 1 views
0

Я пытаюсь сделать опрос с множественным выбором, который позволяет пользователю выбирать из вариантов 1-x. Как я могу сделать так, что если пользователь вводит любые символы, кроме цифр, вернуть что-то вроде «Это неверный ответ»Как я могу ограничить ввод пользователя только целыми числами в Python

def Survey(): 
    print('1) Blue') 
    print('2) Red') 
    print('3) Yellow') 
    question = int(input('Out of these options\(1,2,3), which is your favourite?')) 
    if question == 1: 
     print('Nice!') 
    elif question == 2: 
     print('Cool') 
    elif question == 3: 
     print('Awesome!') 
    else: 
     print('That\'s not an option!') 
+0

поймать исключение –

ответ

4

Ваш код станет:

def Survey(): 

    print('1) Blue') 
    print('2) Red') 
    print('3) Yellow') 

    while True: 
     try: 
      question = int(input('Out of these options\(1,2,3), which is your favourite?')) 
      break 
     except: 
      print("That's not a valid option!") 

    if question == 1: 
     print('Nice!') 
    elif question == 2: 
     print('Cool') 
    elif question == 3: 
     print('Awesome!') 
    else: 
     print('That\'s not an option!') 

Как это работает, он создает цикл, который будет контур бесконечно, пока не будут введены только числа. Так что скажем, что я положил «1», он сломал бы цикл. Но если я поставлю «Fooey!» ошибка, которая была поднята, попадает в команду except, и она зацикливается, поскольку она не была сломана.

+0

спасибо, это просто то, что мне нужно! – user3578683

+0

Без проблем, рад, что я мог бы помочь. – HarryCBurn

1

Одно из решений, среди прочего: использовать функцию type функции или isinstance, чтобы проверить, если у вас есть int или float или какой-либо другой тип

>>> type(1) 
<type 'int'> 

>>> type(1.5) 
<type 'float'> 

>>> isinstance(1.5, int) 
False 

>>> isinstance(1.5, (int, float)) 
True 
1

я ловил сначала ValueError (не целое) исключение и проверить, если ответ является приемлемым (в пределах 1, 2, 3) или поднять еще ValueError исключение

def survey(): 
    print('1) Blue') 
    print('2) Red') 
    print('3) Yellow') 

    ans = 0 
    while not ans: 
     try: 
      ans = int(input('Out of these options\(1, 2, 3), which is your favourite?')) 
      if ans not in (1, 2, 3): 
       raise ValueError 
     except ValueError: 
      ans = 0 
      print("That's not an option!") 

    if ans == 1: 
     print('Nice!') 
    elif ans == 2: 
     print('Cool') 
    elif ans == 3: 
     print('Awesome!') 
    return None 
Смежные вопросы