Как вызвать my_function в main & запросить пользователя для ввода в main метод; my_function принимает пользовательский ввод и объединяет в обратном порядке (Python 3) - PullRequest
0 голосов
/ 19 января 2019

Мне нужно создать функцию, которая выполняет следующие действия для назначения класса: - Напишите функцию Python, которая будет принимать в качестве входных данных три строковых значения от пользователя.Метод вернет пользователю конкатенацию строковых значений в обратном порядке.Функция вызывается из основного метода.- В методе main запросите у пользователя три строки.

Первоначально я создал функцию (lkng_glss_lttr_bot) со вложенным словарем, которая запрашивала у пользователя ввод (разделы буквы), сохраняла его в словаре, объединяла записи и затем возвращала в обратном порядке.Строки как ЗазеркальеФункция работала так, как я ожидал, и я смог создать небольшую программу с циклами, чтобы пользователь мог добавлять новые записи.Но как только я добавил основной метод, удалил вход из lkng_glss_lttr_bot () и попытался поместить вход в main (), все пошло не так.

В настоящее время я получаю NameError: имя 'получателя' не определено.Если я закомментирую функцию get_recipient (), то она перейдет к следующей вложенной функции и выдаст мне NameError.

В моем коде отсутствует что-то, что позволяет именовать переменные, но я нуб и не могу понять, в чем проблема.

Я подумал, что возможнопроблема заключалась во вложенном словаре, поэтому я упростил функцию, вынув словарь, удалив циклы и завершив программу после составления одной буквы.Опять же, функция работала, когда ввод был в lkng_glss_lttr_bot (), но как только я попытался поместить ввод в main (), я не смог заставить программу выполняться.

Примеры, которые я видел наПоэтому я предлагаю создать отдельную функцию вне main () для хранения информации и ввода пользовательских данных в эту отдельную функцию, но это не будет работать в соответствии с требованиями моего назначения.Некоторые люди также предложили добавить глобальные переменные.Я попробовал это, и все еще получил ту же ошибку.

Я пытался создать вложенную функцию для каждой переменной и вернуть переменную, но это также не сработало.Я думал, что вложение функций в main будет соответствовать требованиям ввода пользователя в метод main, но я все еще получаю NameError.

Честно говоря, я вообще не понимаю main (), особеннос пользовательским вводом, потому что примеры, которые я видел, не имеют ввода в main ().

def main():
    lkng_glss_lttr_bot()


    def get_recipient():
        recipient = [input("\nWhat is the recipient’s name?\n")]
        return get_recipient

    def get_inquiry():
        print("\nPlease inquire about %s's well being." % recipient)
        inquiry = input("You can ask about the weather, or what %s has been doing to pass the time in the interim between your last contact:\n" % recipient)
        return inquiry

    def get_lttr_body():
        body = input("\nPlease write a few sentences to inform %s of the recent happenings in your life:\n" % recipient)
        return body

    def get_final_sentiment():
        final_sentiment = input("\nPlease close the letter by expressing the importance of your friendship and your desire to spend time with %s in the future:\n" % recipient )
        return final_sentiment

    def get_sender():
        sender = input("\nWhat is your name?\n")
        return sender

    def get_postscript():
        postscript = input("\nPlease write a short postscript to %s:\n" % recipient)
        return postscript  


# Function to create a personalized letter in reverse order 
def lkng_glss_lttr_bot():

    recipient = get_recipient()
    inquiry = get_inquiry()
    body = get_body()
    final_sentiment = get_final_sentiment()
    sender = get_sender()
    postscript = get_postscript()

    greeting = str("My Dearest")
    closing = str("With all my love and affection,")

    # Concatenate Greeting and Recipient
    Line_1 = greeting + " " + recipient + "," + "\n"

    # Concatenate Inquiry and Body
    Line_2 = inquiry + " " + body + "\n"

    # Concatenate Line_1, Line_2, Final_Sentiment, Closing, Sender, & Postscript to create a reverse ordered letter
    rvrs_lttr = "P.S. " + postscript + "\n" + sender + "\n" + closing + "\n" + final_sentiment + "\n" + Line_2 + Line_1

    # Using rvrs_lttr format, reverse the order of the entire letter using an extended slice to create a Looking Glass Letter
    lkng_glss_lttr = rvrs_lttr[::-1]

    # Notify sender that their letter contents have been added to the Bot 
    print("\nYour letter to %s has been composed by the Looking Glass Letter Bot:\n" % recipient + lkng_glss_lttr)

    if __name__ == '__main__': main()

Буква должна выглядеть так:

, aloL tseraeD yM

.enif m'I? Uoy эра woH

! Uoy ssim I

, noitceffa dna evol ym lla htiW

oG-oG

! em llaC .SP

И все работает так, как я ожидаю, если входные подсказки находятся в функции lkng_glss_lttr_bot.Но я не могу обернуть голову вокруг main ().Любые предложения, чтобы получить меня в правильном направлении, будут оценены.Спасибо!

1 Ответ

0 голосов
/ 19 января 2019

Здесь рабочий код :

def main():

    recipient = ""

    def get_recipient():
        recipient = [input("What is the recipients name?")]
        return recipient

    def get_inquiry():
        print("\nPlease inquire about %s's well being." % recipient)
        inquiry = input("You can ask about the weather, or what %s has been doing to pass the time in the interim between your last contact:\n" % recipient)
        return inquiry

    def get_body():
        body = input("\nPlease write a few sentences to inform %s of the recent happenings in your life:\n" % recipient)
        return body

    def get_final_sentiment():
        final_sentiment = input("\nPlease close the letter by expressing the importance of your friendship and your desire to spend time with %s in the future:\n" % recipient )
        return final_sentiment

    def get_sender():
        sender = input("\nWhat is your name?\n")
        return sender

    def get_postscript():
        postscript = input("\nPlease write a short postscript to %s:\n" % recipient)
        return postscript  

    def lkng_glss_lttr_bot():  
        recipient = get_recipient()
        inquiry = get_inquiry()
        body = get_body()
        final_sentiment = get_final_sentiment()
        sender = get_sender()
        postscript = get_postscript()

        greeting = str("My Dearest")
        closing = str("With all my love and affection,")

        # Concatenate Greeting and Recipient
        Line_1 = greeting + " " + str(recipient) + "," + "\n"

        # Concatenate Inquiry and Body
        Line_2 = inquiry + " " + body + "\n"

        # Concatenate Line_1, Line_2, Final_Sentiment, Closing, Sender, & Postscript to create a reverse ordered letter
        rvrs_lttr = "P.S. " + postscript + "\n" + sender + "\n" + closing + "\n" + final_sentiment + "\n" + Line_2 + Line_1

        # Using rvrs_lttr format, reverse the order of the entire letter using an extended slice to create a Looking Glass Letter
        lkng_glss_lttr = rvrs_lttr[::-1]

        # Notify sender that their letter contents have been added to the Bot 
        print("\nYour letter to %s has been composed by the Looking Glass Letter Bot:\n" % recipient + lkng_glss_lttr)

    lkng_glss_lttr_bot()   


if __name__ == '__main__': 
    main()
...