题目传送门
思路
这题我用的是 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) #输出变量