В python мое приглашение ввода печатается второй раз после того, как я отвечаю на него один раз - PullRequest
0 голосов
/ 22 марта 2020

В моей текстовой приключенческой игре, когда у меня есть

Хочешь сыграть (да / нет) да
Ах! Вас преследует что-то! Вам нужно go быстро!
Если вы возьмете велосипед или скейтборд (велосипед / скейтборд), скейтборд
Ах! Вас преследует что-то! Вам нужно go быстро!
Если вы возьмете велосипед или скейтборд (велосипед / скейтборд)

Это означает, что когда я выбираю скейтборд один раз, вопрос повторяется, но если Я выбрал велосипед, он идет нормально. Это код:

def chooseAnswer():
    answer=''
    while answer.lower().strip() !='yes' and answer.lower().strip() !='no':
        answer = input('Would You like To Play (yes/no)')
    return answer
def chooseAnswer1():
    answer1=''
    while answer1.lower().strip() !='bike' and answer1.lower().strip() !='skateboard':
        answer1= input('''Ah! You are being chased by something! You need to go fast!\nShould you take the bike or the skateboard (bike/skateboard)''')

    return answer1
#Branches off 1 if choose Bike
def chooseAnswer11():
    answer11=''
    while answer11.lower().strip() !='right' and answer11.lower().strip() != 'left':
        answer11= input('''You see two paths. Quickly, you have to decide which path to go on! The left one is dark and looks like it goes down a cave. The right one goes up a hill and into sunlight.(left/right)''')
 return answer11
#Branches Off 1 if choose skateboard
def chooseAnswer12():
    answer12=''
    while answer12.lower().strip() !='sleep' and answer12.lower().strip() != 'awake':
        answer12= input('''Quickly you hop on your skateboard, heading for woods.\nYou settle for the night in the woods.\nYou see the mysterious thing that is search for you.\nDo you sleep or stay awake?(awake/sleep)''')

    return answer12

if chooseAnswer()=='yes':
    if chooseAnswer1()=='bike':
        if chooseAnswer11()=='right':
            if chooseAnswer111()=='TBD':
                print('TBD')
            elif chooseAnswer112()=='TBD':
                print('TBD')
        elif chooseAnswer11=='left':
            if chooseAnswer121()=='TBD':
                print('TBD')
            elif chooseAnswer122()=='TBD':
                print('TBD')
    elif chooseAnswer1()=='skateboard':
        if chooseAnswer12()=='awake':

Кто-нибудь понимает, почему подсказка ввода повторяется дважды?

1 Ответ

0 голосов
/ 22 марта 2020

Проблема вызвана вызовом функции chooseAnswer1 в ваших условных выражениях.

if chooseAnswer()=='yes':
    # First call of chooseAnswer1
    if chooseAnswer1()=='bike':

        ...Code Removed for Readability...

    # second call of chooseAnswer1 
    elif chooseAnswer1()=='skateboard':
        if chooseAnswer12()=='awake':

Чтобы исправить это, вы захотите присвоить вызов функции переменной, а затем сравнить возвращаемый объект с этой переменной в вашем условии. Скорее всего, вы захотите сделать это для всех функций в вашей программе:

# Single call of chooseAnswer
answer0 = chooseAnswer()
if answer0 == 'yes':
    # Single call of chooseAnswer1
    answer1 = chooseAnswer1()
    if answer1 == 'bike':

        ...Code Removed for Readability...

    # Since the variable is assigned to the returned object,
    # the function is not called again in the elif condition.
    elif answer1 == 'skateboard':
        answer12 = chooseAnswer12()
        if answer12 == 'awake':


Также может быть полезен новый оператор моржа := Python 3.8, но я все еще использую 3.7 поэтому я оставлю это кому-то другому, чтобы предоставить примеры кода о том, как использовать его в этой ситуации.

Редактировать: OP сказал в комментарии к моему ответу:

Поэтому я столкнулся с другой проблемой. Я назначил все переменные функций, поэтому, когда я думаю, что все идет по порядку, я помещаю переменные. То, что я говорю, это когда появляется первый вопрос, он отвечает на него так, как будто я сказал «да», и хотя я говорю «скейтборд», он дает мне велосипедную дорожку.

Мой ответ слишком длинный, чтобы публиковать его в комментариях из-за того, как долго URL-адрес этой python ссылки репетитора , но я рекомендую их сравните их размещение их вызовов функций с тем, где я их разместил в моем примере:

answer0 = chooseAnswer()
if answer0 == 'yes':
    answer1 = chooseAnswer1()
    if answer1 == 'bike':
        answer11 = chooseAnswer11()
        if answer11 == 'right':
            print("right path")
        elif answer11 == 'left':
            print("left path")
    elif answer1 == 'skateboard':
        answer12 = chooseAnswer12()
        if answer12 == 'sleep':
            print("sleep path")
        elif answer12 == 'awake':
            print("awake path")

Ключевая деталь здесь - это размещение вызовов функций.

...