在不重新启动整个循环的情况下重新启动if语句?

时间:2019-12-03 00:55:34

标签: python loops if-statement flowchart

我想设计一个受流程图启发的“调查”,但我不明白为什么它不起作用。我想要没有包装的简单物品,因为我还没有把它们包裹起来。

应如何工作:

Q1-输入为是-> Q2-输入为-Q3->输入是-...-Q9-输入为-> Q10

Q1-输入为否->中断

第一季度-可能输入->重新第一季度

当我当前输入与yes或no不同的内容时,它从开头(Q1)开始。.我可以让它在所有问题中重复IF语句,直到输入为yes或no吗?

while True:
    x = input ('question_text' )
    if x.lower () == 'yes':
        x = input ( 'question2_text' )
        if x.lower () == 'yes':
            x = input ( 'question3_text' )
            if x.lower () == 'yes':
                          ETC... 
            if x.lower () == 'no':
                print ( 'No.' )
                break
            else:
                print ('ONLY YES/NO')
        if x.lower () == 'no':
            print ( 'No.' )
            break
        else:
            print ('ONLY YES/NO')
    if x.lower () == 'no':
        print ( 'No.' )
        break
    else:
        print ('ONLY YES/NO')

2 个答案:

答案 0 :(得分:0)

如果不对当前结构上的所有情况重复相同的else语句,将无法做到这一点。

但是,您可以对输入使用一个函数,该函数将反复对其求值。

例如:

def yes_or_no_question(question):
    answer = input(question).upper()
    if answer in ["YES", "NO"]:
        print(answer)
        return answer == "YES"
    print("Only YES or NO")
    return yes_or_no_question(question)

while True:
    if not yes_or_no_question('question_text'):
        break

    if not yes_or_no_question('question2_text'):
        break

    print("Yes to all, starting again!")

编辑

您可以根据需要嵌套和组合尽可能多的东西。


while True:
    if yes_or_no_question('question_text'):
        print("Something for question 1 in case of yes")
        # you can add any logic here, including another question

    else:
        # you can add any logic here, including another question
        print("No for question 1")
        if yes_or_no_question('Question for NO on first question'):
            print("Yes for nested on Q1 No")
        else:
            print("No for nested on Q1 no")
        break

    if not yes_or_no_question('question2_text'):
        break

    print("Yes to all, starting again!")

答案 1 :(得分:0)

我喜欢luigibertaco的第一个回答,但也许您正在寻找与众不同的东西。

尝试使用您的格式,因此我将每个问题放入while循环中,直到输入“是”或“否”之前,它将一直询问相同的问题。

stop_while = True
while stop_while:
    q_one = True
    while q_one:
        x = input('question_text')
        if x.lower() == 'yes':
            break
        if x.lower() == 'no':
            q_one = False
    if q_one:
        pass
    else:
        break
    q_two = True
    while q_two:
        x2 = input('question2_text')
        if x2.lower() == 'yes':
            break
        if x2.lower() == 'no':
            q_two = False
        stop_while = False
stop_while = False