2015-07-31 3 views
0

Я довольно новыми для Python, я просто интересно, что лучший способ сделать это (очень простой вопрос):Python вызов функции снова, если неправильный ввод

У меня есть функция, которая предлагает пользователю выбрать опцию , если опция они Указан недопустимый он будет вызывать функцию снова:

def choose_colour(): 
    print "Select colour:" 
    print "1. Red" 
    print "2. Blue" 
    print "3. Green" 
    selection = raw_input() 

Изначально я был, если заявление, сравнивающий входной и если это был неправильный вход я бы вызвать функцию снова внутри себя. Что непрактично и неправильно.

def choose_colour(): 
    print "Select colour:" 
    print "1. Red" 
    print "2. Blue" 
    print "3. Green" 
    selection = raw_input() 

    if selection == "1": 
     colour = "Red" 
    elif selection == "2": 
     colour = "Blue" 
    elif selection == "3": 
     colour = "Green" 
    else: 
     print "Please select, 1, 2 or 3" 
     choose_colour() 

Edit:

Это работает, но я предпочитаю решение цикла.

def set_TPL_colour(): 
    print "Enter TPL colour value:" 
    print "1. WHITE" 
    print "2. GREEN" 
    print "3. AMBER" 
    print "4. RED" 
    print ">>>", 
    option = raw_input() 
    if option == "1": 
     tpl_colour = "WHITE" 
     return tpl_colour 
    elif option == "2": 
     tpl_colour = "GREEN" 
     return tpl_colour 
    elif option == "3": 
     tpl_colour = "AMBER" 
     return tpl_colour 
    elif option == "4": 
     tpl_colour = "RED" 
     return tpl_colour 
    else: 
     print "ERROR incorrect option selection" 
     tpl_colour = set_TPL_colour() 
     return tpl_colour 
+0

Это не обязательно * непрактично и неправильно. * Если 'select_colour' должен вернуть выбранный цвет, просто используйте' return ...' вместо 'color = ...', а затем в конце измените его как 'return select_colour()' – JCOC611

+0

Эта функция выходит без печати ничего, если выбор находится в '['1', '2', '3']' – ozgur

ответ

1

Вам не нужно вызывать функцию снова, просто положить его в цикле в то время как и переназначить переменную, если вход не действует:

def choose_colour(): 
    print "Select colour:" 
    print "1. Red" 
    print "2. Blue" 
    print "3. Green" 
    selection = raw_input() 
    while selection not in ("1","2","3"): 
     print "Please choose a valid option" 
     selection = raw_input() 
    if selection == "1": 
     colour = "Red" 
    elif selection == "2": 
     colour = "Blue" 
    elif selection == "3": 
     colour = "Green" 

уборщик версия:

def choose_colour(): 
    colourChoices = {"1":"Red", "2":"Blue", "3":"Green"} 
    selection = raw_input("Select colour:\n 1. Red\n 2. Blue\n 3. Green") 
    while !colourChoices[selection]: 
     print "Please enter valid data" 
     selection = raw_input("Select colour:\n 1. Red\n 2. Blue\n 3. Green") 
    colour = colourChoices[selection] 
+0

Это более чистое решение, которое я пытался. Спасибо, это имеет смысл :) – Lizzeiy

0

Нечто подобное.

input = raw_input() 
while not_valid(input): 
    print_options() 
    input = raw_input() 
1

Используйте словарь, пример -

def choose_colour(): 
    print "Select colour:" 
    print "1. Red" 
    print "2. Blue" 
    print "3. Green" 
    colordict = {"1":"Red" , "2":"Blue", "3":"Green"} 
    selection = raw_input() 
    ret = colordict.get(selection) 
    if not ret: 
     return choose_colour() 
    return ret 

Вы также можете сделать во время цикла -

def choose_colour(): 
    colordict = {"1":"Red" , "2":"Blue", "3":"Green"} 
    ret = None 
    while not ret: 
     print "Select colour:" 
     print "1. Red" 
     print "2. Blue" 
     print "3. Green" 
     selection = raw_input() 
     ret = colordict.get(selection) 
    return ret 

Пример/Demo -

>>> def choose_colour(): 
...  print "Select colour:" 
...  print "1. Red" 
...  print "2. Blue" 
...  print "3. Green" 
...  colordict = {"1":"Red" , "2":"Blue", "3":"Green"} 
...  selection = raw_input() 
...  ret = colordict.get(selection) 
...  if not ret: 
...   return choose_colour() 
...  return ret 
... 
>>> choose_colour() 
Select colour: 
1. Red 
2. Blue 
3. Green 
5 
Select colour: 
1. Red 
2. Blue 
3. Green 
2 
'Blue' 
0

Вы можете использовать простой способ. Прежде всего, используйте функцию Input() и управляющие ошибки. Кроме того, вы можете разместить здесь длинный список, и эта программа может справиться с этим.

Смежные вопросы