2015-05-11 3 views
0

Функция, которую я написал, рисует либо square, triangle, либо rectangle. он просит пользователя ввести ту форму, которую они хотят нарисовать. если вход не один из следующих, он вновь просит пользователя ввести правильный вход:Функция продолжает запрашивать ввод

Допустимые входы

square, 
triangle, 
rectangle, 
q #function Quits. 

Проблема у меня, когда пользователь вводит правильный ввод в первый раз, функция переносит на отлично и рисует эту форму. однако, если пользователь сначала вводит «недопустимый вход», например (круг), он запрашивает у пользователя повторный ввод «допустимого ввода (формы)». когда он делает это так, то функция бесконечности продолжает говорить:

сообщение об ошибке

Unknown shape. Please try again 
Enter shape to draw (q to quit): 

код

def get_valid_shape(): 
''' Asking the user to enter a valid shape that the function can draw ''' 
    shape = input("Enter shape to draw (q to quit): ").lower() 
    unvalid_names1 = shape != "triangle" and shape != "square" 
    unvalid_names2 = shape != "rectangle" and shape != "q" 

    while unvalid_names1 == True and unvalid_names2 == True: 
     print("Unknown shape. Please try again") 
     shape = input("Enter shape to draw (q to quit): ").lower() 
    if shape == "q": 
     print("Goodbye") 
    return 

Может кто-нибудь помочь?

ответ

3

Это потому, что вы просите следующее значение в цикле без условия выхода из цикла. Простым исправить было бы следующее:

def get_valid_shape(): 
    ''' Asking the user to enter a valid shape that the function can draw ''' 
    shape = input("Enter shape to draw (q to quit): ").lower() 
    unvalid_names1 = shape != "triangle" and shape != "square" 
    unvalid_names2 = shape != "rectangle" and shape != "q" 
    quit = False 

    while not quit and unvalid_names1 == True and unvalid_names2 == True: 
     print("Unknown shape. Please try again") 
     shape = input("Enter shape to draw (q to quit): ").lower() 
     quit = shape == 'q' 

    if shape == "q": 
     print("Goodbye") 
    return 

get_valid_shape() 

Кроме того, ваш код очень трудно понять. Я взял на себя смелость создать другую версию. Надежность - это мнение на самом деле, но оно также решает вашу проблему, делая (ИМХО) более понятным, что вы пытаетесь сделать:

def get_valid_shape(): 
    ''' Asking the user to enter a valid shape that the function can draw ''' 
    valid_shapes = set(['triangle', 'square', 'rectangle']) 
    user_quit = False 
    requested_shape = '' 

    while True: 
     requested_shape = input("Enter shape to draw (q to quit): ").lower() 
     if requested_shape in valid_shapes: 
      break 
     elif requested_shape == 'q': 
      user_quit = True 
      break 
     else: 
      print('Invalid shape') 

    if not user_quit: 
     print('Would now print shape') 
    else: 
     print('Goodbye') 

get_valid_shape() 
+0

Да, я согласен с вами, спасибо !. Вы даете мне разрешение на использование кода ur для моей задачи? –

+0

Несомненно. Код в StackOverflow [находится под CC-BY-SA] (https://creativecommons.org/licenses/by-sa/3.0/) (см. [Здесь] (http://meta.stackexchange.com/a/12528)). Я лично поставил комментарий со ссылкой на ответ SO, если я скопирую код дословным и пост-новым версиям, если я его реорганизую. – wonderb0lt

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