ЗАДАНИЕ:
Нужно написать программу, которая найдет в тексте ряд простых арифметических выражений и подсчитает их.
text = """ a=1 a=+1 a=-1 a=b a=b+100 a=b-100 b+=10 b+=+10 b+=-10 b+=b b+=b+100 b+=b-100 c-=101 c-=+101 c-=-101 c-=b c-=b+101 c-=b-101
В вашу функцию calculate(data, findall) будет передан словарь с начальными значениями переменных a, b и c: data = {“a”:1, “b”:2, “c”: 3} и ссылка на функцию findall, а вы должны вернуть такой же словарь с новыми значениями для a, b и c.
Эталонное решение занимает 11 строк, не содержит импортов, не использует eval, а регулярное выражение находит выражения и бьет каждое на четыре группы (некоторые группы для некоторых выражений оказываются пустыми):
Имя переменной слева.
Знак перед = (если есть).
Имя переменной справа (если есть).
Число (если есть) со знаком (если есть).
Это позволяет легко (буквально в одну строку) посчитать правую часть, а потом, в зависимости от наличия знака перед =, произвести действие с левой частью. Однако ваш алгоритм может быть другим, требуется только выполнить ограничения на вызов findall() и оставить сигнатуру calculate() неизменной.
Я написал регулярку, а как посчитать - без понятия.
def calculate(data, findall): matches = findall(r"([abc])([+-]?=)([abc])?([+-]?\d+)?") for v1, s, v2, n in matches: