Написать класс YesFuture и функцию parse_poly(многочлен, x) со следующими свойствами:
YesFuture — это класс, похожий на Future, только проще.
obj = YesFuture(значение=None) задаёт awaitable-объект obj, для которого await obj немедленно возвращает значение.
obj.set(новое_значение) подменяет значение
У parse_poly() два параметра.
Второй параметр — объект типа YesFuture.
Первый параметр — строка, в которой описан многочлен от x по стандартным правилам: знак * между необязательным коэффициентом и x не ставится, цифры степени — это unicode-цифры верхнего регистра (SUPERSCRIPT).
parse_poly() возвращает корутину, вычисляющую значение многочлена для текущего значения x.
При создании корутины вместо операций сложения, умножения и возведения в степень необходимо пользоваться только специальными корутинами Sum(a, b), Mul(a, b) и Pow(a, b), параметры которых — awaitable-объекты (другие корутины или YesFuture)
Специальные корутины будут входить в каждый тест.
1 async def Sum(a, b):
2 return await a + await b
3
4 async def Mul(a, b):
5 return await a * await b
6
7 async def Pow(a, b):
8 return await a ** await b
9
10 async def Run(poly, *args):
11 x = YesFuture()
12 for arg in args:
13 s = parse_poly(poly, x)
14 x.set(arg)
15 print(await s)
16
17 asyncio.run(Run("3x⁵ + x² - 6x + 4", 4, 2))
Подсказка 1: в моём решении parse_poly создаёт довольно много корутин (по одной на каждую бинарную операцию), но так как все они планируются к вызову из финальной s, необходимости их где-то указывать не возникает
Подсказка 2: возможно, может слегка помочь unicodedata.digi()
3068 92
