Например, потому, что символы в строке нумеруются с нуля, а не с единицы.
Всё намного проще: z = 0
op = { # список всех команд
'add': lambda x: z + int(x[1]),
'sub': lambda x: z - int(x[1]),
'mul': lambda x: z * int(x[1]),
'mod': lambda x: z % int(x[1]),
'div': lambda x: z // int(x[1]),
'result': lambda x: [print(z), z][1], # трюкачество
'exit': lambda x: exit()
}
while True:
cmd = input().split()
z = op[cmd[0]](cmd)