如何展平全部包含字符串的嵌套 IF 语句?

Car*_*ght 5 python nested

我正在制作一个“选择您自己的文本冒险”游戏,到目前为止,该游戏包含太多嵌套。示例代码如下 = 我的代码格式相同,只是嵌套更多 - 有时接近 10 层深。

我的问题是:有什么办法可以把它压平吗?这些字符串意味着我需要每个 IF 语句在每次有效时打印一些内容,所以我不能只使用“AND”,如下所示:

if A and B:
    do something
elif C and D:
    do something else
Run Code Online (Sandbox Code Playgroud)

我想过将重复的部分放在自己的函数中,但是在这种情况下这不会提高可读性 - 至少我无法弄清楚。

帮助?

print "First String"
choice = raw_input("Choose A or B")
if choice == "A":
    print "You Chose A"
    choice = raw_input("Choose C or D")
    if choice == "C":
        print "You Chose C"
        choice = raw_input("Choose E or F")
        if choice == "E" or choice == "F":
            print "END"
    elif choice == "D":
        print "You Chose D"
        choice = raw_input("Choose G or H")
        if choice == "G" or choice == "H":
            print "END"
elif choice == "B":
    print "You Chose B"
    choice = raw_input("Choose I or J")
    if choice == "I":
        print "You Chose I"
        choice = raw_input("Choose C or D")
        if choice == "C":
            print "You Chose C"
            choice = raw_input("Choose E or F")
            if choice == "E" or choice == "F":
                print "END"
        elif choice == "D":
            print "You Chose D"
            choice = raw_input("Choose G or H")
            if choice == "G":
                print "END"
            elif choice == "H":
                print "You Chose H"
                choice = raw_input("Choose K or L")
                if choice == "K" or choice == "L":
                    print "END"
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 3

如果映射很简单,比如,如果我先选择 A,我可以选择 C ​​或 D,如果我先选择 B,我可以选择 C ​​或 E。现在在 C 中,无论第一选择是否是 A或 B,您得到的选择是相同的。然后你可以使用递归和字典,比如 -

dict = {'-1':['A','B'], 'A' : ['C','D'] , 'B':['I','J'], 'C':['E','F'] ..}
Run Code Online (Sandbox Code Playgroud)

然后是一个递归函数,例如 -

def choose(previousChoice, num):
    print str(num) + " String"
    choice = raw_input("Choose " + ' or '.join(dict[previousChoice]) + " :")
    if dict.get(choice) != None and len(dict.get(choice)) > 0:
        choose(choice, num + 1)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您从 -

choose('-1',1)
Run Code Online (Sandbox Code Playgroud)