У меня возникли проблемы с использованием самоопределяющихся функций с Python - PullRequest
0 голосов
/ 26 апреля 2020

Я написал простую программу для пользователя sign_up & log_in System с Python. Я использовал много самоопределяющихся функций, чтобы сделать коды элегантными. Вот функция 'choose_page':

def choose_page():
    print('Welcome to the code system!')
    print('****************************\n')
    print('there are the three options:\n'
          '1.sign up\n'
          '2.log in\n'
          '3.quit')
    print('****************************\n')
    option = eval(input('Please input your option:'))
    return option

А вот функция 'sign_up':

def sign_up():
    global customer
    # global option
    # global option2
    ..................
    ..................(many codes)
    option2 = eval(input('Now you can log in the main page by inputting 2 or 0 to return the sign_page: '))
    return option2

Я также написал функции самоопределения log_in и quit, затем Я могу сопоставить их так, как я хочу, вот так (этот шаг без функции 'quit', поскольку сейчас это не имеет значения):

if choose_page() == 1:
    sign_up()     
    if sign_up() == 0:
        choose_page()
    elif sign_up() == 2:
        log_in()            
elif choose_page() == 2:
    log_in() 

Я запускаю его, но возникла проблема, похоже на ошибку logi c:

Когда я вошел в «choose_page» и ввел 1, он натолкнулся на «sign_up», в конце «sign_up», я ввел либо 2, либо 0, он все еще сталкивался с «sign_up» снова и снова без Остановка.

Есть ли ошибка logi c, когда я использую эти самоопределяемые функции? Заранее спасибо за помощь.

1 Ответ

1 голос
/ 26 апреля 2020

Каждый раз, когда вы пишете sign_up(), он вызывает его и запускает функцию. Python не умный. Это не go, «Мы уже запустили sign_up() раньше. Я помню ответ. Нет необходимости запускать его снова!» Это именно то, что вы говорите. Если вы пишете sign_up(), он вызывает sign_up().

Чтобы избежать повторных запросов, вам нужно сохранить его результат в переменной и вызывать функцию только один раз.

if choose_page() == 1:
    sign_up_answer = sign_up()     
    if sign_up_answer == 0:
        choose_page()
    elif sign_up_answer == 2:
        log_in()     

Повторите ту же идею для любой другой функции, которая имеет ту же проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...