Вы можете поместить вопросительные циклы в функцию общего назначения, которая возвращает логическое значение. Это позволило бы остальной части кода использовать и / или напрямую логифицировать 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 ?: