嵌套条件转换

时间:2016-10-07 23:51:21

标签: python

我正在尝试编写一个将嵌套条件语句转换为单行条件的小解析器。一个基本的例子是:

if age > 15:
    if size == 3:
        test = 1
    if size == 4:
        test = 2

转换为:

'if age > 15 and size == 3: test=1'
'if age > 15 and size == 4: test=2'

我首先尝试使用python ast模块,但在这种情况下遍历树可能不是一个好主意。我认为使用正则表达式也许是一个好主意。我正试图帮助解决这个问题的策略。

1 个答案:

答案 0 :(得分:1)

尝试使用堆栈: (此程序不进行任何错误检查,它假设您的代码与上面的相同,并且必须使用制表符,而不是4个空格)

mystack=[]
toprint=[]
ins=input('Next line: ')
while ins!='':
    level=0
    while ins[0]=='\t':
        ins=ins[1:]
        level+=1
    if ins[0:2]=='if':
        if len(mystack)==level:
            mystack.append(ins[3:-1])
        else:
            mystack=mystack[:level]
            mystack.append(ins[3:-1])
    else:
        if level!=len(mystack):
            mystack=mystack[:level]
        toprint.append('if ')
        for i in mystack:
            toprint[-1]+=i
            toprint[-1]+=' and '
        toprint[-1]=toprint[-1][:-5]+': '
        toprint[-1]+=ins
    ins=input('Next line: ')
print()
for i in toprint:
    print(i)