Решение Pythonic может состоять в том, чтобы создать операнд класса с ассоциированными операторами +, -, *, /, заданными специальными методами (__add__, __radd__, __mult__, __rmult__ и т. Д.). Если вы правильно используете методы «__r», вы можете начать также включать литеры (1, 2.0, 3.0) практически в любом порядке, если есть один операнд.
Класс будет иметь счетчик, установленный на ноль во время создания. Каждый вызов добавляет 1, но также добавляет счетчик каждого оператора (по умолчанию = 0).
Тогда вы могли бы написать:
a = Operand(2)
b = a+2-5
assert b.effort == 3
Тогда вы можете пойти дальше и рассчитать усилие:
a = Operand(5)
a = a + 3 #1
a = a * a #2
a = a * -1 #3
print(a.effort)
В первой строке создается объект. Во второй строке результат a + 3 равен 8, а полученный объект имеет усилие 1. В третьих, он имеет усилие 3 (1 + 1 для a + 1 для a). В четвертом случае он прилагает усилия 4. И т.д.
Я не реализовал и не тестировал его, но он должен работать более или менее в соответствии с этими принципами.
Примечание о litterals: а + 2 + 3 даст вам кол-3, но 2 + 3 + а может дать вам кол-2 (с 5 по-прежнему является целым числом, а не Операнд). Поэтому, возможно, вы хотите избежать методов __r, чтобы оставаться на безопасной стороне ... это зависит.
Почему бы просто не посчитать это? Кроме того, как вы знаете, что это 40? – QuantumFool
Я думаю, что пример, который вы упомянули, не то, что вы действительно хотите. Если это то, что вам нужно, увеличивайте 'count' на' 4' каждый раз, когда вы вызываете 'b()'? –
после каждого 'a = a + 3' put' добавляет = добавляет +1, и т. Д. и в конце 'print (« + ---> »добавляет)' – furas