题目传送门

P2366

思路

这题我用的是 python,因为 python 自带的字典类和丰富的

字符串处理函数很适合做这道题。开一个字典,使用字典的键

当作变量名,使用字典的值当作变量值,然后直接按题目里所

说的模拟来做。但是 python 的input()会把空格输入进

去,所以要用strip()来把空格处理掉,再用strip(';')

来处理掉分号。做这种模拟题一定要细心,我提交了3次才AC

改了三次才AC的代码

d = {} #字典数据结构
for x in range(int(input())): #输入循环次数,并转换类型直接返回次数
    t = input().strip().strip(';').split('=') #将多余的空格和分号处理掉,并将等于号前面和后面分成两部分
    try: #尝试转成int类型
        t[1] = int(t[1])
    except ValueError: #失败则是其他情况
        if '+' in t[1]: #表达式判断
            t[1] = t[1].split('+')
            try: #尝试把第一个加数转成int类型
                n = int(t[1][0])
            except ValueError: #失败第一个加数则是变量
                n = d[t[1][0]]
            try: #同上,处理第二个加数
                m = int(t[1][1])
            except ValueError:
                m = d[t[1][1]]
            t[1] = n + m #运算结果
        else: #变量直接赋值给另一个变量
            try: #寻找已定义的变量
                t[1] = d[t[1]]
            except KeyError: #变量未定义
                d[t[1]] = 0
                t[1] = 0 #定义变量并赋初始值
    d[t[0]] = t[1] #变量赋值
for a, b in zip(list(d.keys()), list(d.values())): #将两个列表压缩成列表套元组的形式并遍历
    print(a, b) #输出变量