Может ли это быть написано более кратко? - PullRequest
0 голосов
/ 15 марта 2020

так что это просто основа c Python. Он использует операторы if, else и while для создания ответов на основе выбора. Есть ли способ сделать это более кратким? Кроме того, мне бы очень хотелось узнать, как это сделать, чтобы, если пользователь вводит что-то, кроме «да» или «нет», это повторяет вопросы. Спасибо :)!

def func1():
    while True:
        raining = input('Is it raining?: ')

        if raining == 'yes':
            A1 = input('Have an umbrella?: ')

            if A1 == 'no':
                Q1 = 'yes'
                while Q1 == 'yes':
                    print('Wait a while.')
                    Q1 = input('Is it raining? ')

                if Q1 == 'no':
                    print('go outside')

            elif A1 == 'yes':
                print('go outside...')

        elif raining == 'no':
            print('go outside...')

Схема, на которой основан код!

Ответы [ 2 ]

1 голос
/ 15 марта 2020

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

def getAnswer(question):
    while True:
        answer = input(question)
        if answer in ["yes","no"]: return answer == "yes"

def func1():
    while True:
        if  getAnswer("Is it raining?: ") \
        and not getAnswer("Have an umbrella?: "):
            while getAnswer("Wait a while.\nIs it still raining?: "): pass
        print("go outside...")

Другой подход заключается в создании «метаданных» (т. Е. Данных, которые будут управлять поведением обобщенного *). 1015 * программа). Это позволяет вам создать совершенно другое дерево решений без написания новой функции / программы.

def decide(decisions, step="Q1"):
    while True:
        prompt,*nextSteps = decisions[step]
        if "Q" in step: answer = input(prompt+": ")
        else:           answer = print(prompt) or "no"
        if answer not in ["yes","no"]: continue
        step = nextSteps[answer=="yes"]

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

example1:

rainyDay = {  "Q1":("Is it raining?","P1","Q2"),
              "P1":("go outside...","Q1"),
              "Q2":("Have an umbrella?","P2","P1"),
              "P2":("Wait a While.","Q3"),
              "Q3":("Is it still raining?","P1","P2")
            }
decide(rainyDay)

Is it raining?: no
go outside...
Is it raining?: r
Is it raining?: yes
Have an umbrella?: yes
go outside...
Is it raining?: yes
Have an umbrella?: no
Wait a While.
Is it still raining?: no
go outside...
Is it raining?: yes
Have an umbrella?: yes
go outside...
Is it raining?:

example2:

happiness = { "Q1":("Do you have a problem ?","P1","Q2"),
              "P1":("Be Happy!","Q1"),
              "Q2":("Can you do something about it","P1","P2"),
              "P2":("Do It!","Q1"),
            }
decide(happiness)

Do you have a problem ?: no
Be Happy!
Do you have a problem ?: yes
Can you do something about it: no
Be Happy!
Do you have a problem ?: yes
Can you do something about it: yes
Do It!
Do you have a problem ?: no
Be Happy!
Do you have a problem ?:
1 голос
/ 15 марта 2020

Вы должны выйти из while l oop, когда вы можете go снаружи, поместить свои предопределенные ответы в список, и вместо того, чтобы хранить вопросы в переменных, вы можете сделать это:

yes = ['y','yes']
no = ['n', 'no']


def func1():
    cant_go_outside = True
    while cant_go_outside:
        if input('Is it raining?: ') in yes:
            if input('Have an umbrella?: ') in no:
                while cant_go_outside:
                    print('Wait a while.')
                    if input('Is it raining?: ') in no:
                        print('go outside...')
                        cant_go_outside = False
            else:
                print('go outside...')
                cant_go_outside = False
        else:
            print('go outside...')
            cant_go_outside = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...