语句分析#洛谷

题目描述

一串长度不超过 255 255 255 的 PASCAL 语言代码,只有 a , b , c a,b,c a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 0 0 0 输出 a , b , c a,b,c a,b,c 的值。

输入格式

一串符合语法的 PASCAL 语言,只有 a , b , c a,b,c a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 0 0 0

输出格式

输出 a , b , c a,b,c a,b,c 最终的值。

样例 #1

样例输入 #1

a:=3;b:=4;c:=5;

样例输出 #1

3 4 5

提示

输入的 PASCAL 语言长度不超过 255 255 255

def work(data,keyy):
    length=len(data)
    # rest=[]
    # for ketm in range(keyy + 1, length):
    #     if data[ketm] != ';':
    #         rest.append(data[ketm])
    #         pass
    #     else:
    #         anss = ''.join(rest)
    #         break
    anss=data[keyy+1]
    return anss
data=input()
aa=''
bb=''
cc=''
flaga=False
flagb=False
flagc=False
length=len(data)
for item in range(length):
    if data[item] =='a':
        flaga=True
        flagb=False
        flagc=False
        pass
    elif data[item]=='b':
        flagb = True
        flaga = False
        flagc = False
        pass
    elif data[item]=='c':
        flagc = True
        flagb = False
        flaga = False
        pass
    else:
        if data[item]=='=' and flaga:
            tran=work(data,item)
            if tran=='b':
                aa=bb
                pass
            elif tran=='c':
                aa=cc
                pass
            elif tran=='a':
                aa=aa
            elif tran=='':
                aa='0'
            else:
                aa=tran
        elif data[item]=='=' and flagb:
            tran=work(data,item)
            if tran=='a':
                bb=aa
                pass
            elif tran=='c':
                bb=cc
                pass
            elif tran == 'b':
                bb = bb
            elif tran == '':
                bb = '0'
            else:
                bb=tran
        elif data[item]=='=' and flagc:
            tran=work(data,item)
            if tran=='b':
                cc=bb
                pass
            elif tran=='a':
                cc=aa
                pass
            elif tran == 'c':
                cc = cc
            elif tran == '':
                cc = '0'
            else:
                cc=tran
if aa=='':
    aa='0'
    pass
if bb=='':
    bb='0'
    pass
if cc=='':
    cc='0'
    pass
print(aa,bb,cc)

题目挺难懂的,需要注意的几点是,变量之间可以进行数据的传递,这里一开始考虑数据可能是多位数,但是实际上,题目说了只有一位数,所以代码有很多多余判断,已经给注释掉了,再就是如果没有进行赋值,那么这个数应该是零,并且零也是会进行传递的,也就是说,最后输出的部分一定是数字,而不是变量。

你可能感兴趣的:(算法)