Я пишу программу python для вычисления формулы. Я читаю в списке строк, которые содержат значения, операторы и функции.Расчет математической формулы Python
Код, показанный ниже, получает строку, например:
['not', 1.0, 2.0, '=', 'power', 2.0, 3.0, '+']
Код выше, является вариант постфикса математической задачи: Мощность (2,3) + (не 2 = 1) программа должна вычислить нет (2 = 1) во-первых, в результате чего в 1, а затем рассчитать мощность (2,3) дает 9, а затем 8 + 0 приводит к возвращению 8.
до сих пор мой код, чтобы вычислить ответы
stack = []
def calculate(inputs):
if (inputs[0] == "sum"):
inputs.remove("sum")
for a in inputs:
if (a) == "not":
inputs.remove(a)
op1, op2 = inputs[0], inputs[1]
inputs.remove(op1)
inputs.remove(op2)
if op1 != op2:
stack.append('0')
else:
stack.append('1')
continue
if (a) == 'power':
inputs.remove(a)
continue
if type(a) is float:
stack.append(a)
continue
op1, op2 = stack.pop(), stack.pop()
#if a == 'power':
if a == '+':
stack.append(op2 + op1)
elif a == '-':
stack.append(op1 - op2)
elif a == '*':
stack.append(op2 * op1)
elif a == '/':
stack.append(op1/op2)
elif a == '=':
if op1 != op2:
stack.append('0')
else:
stack.append('1')
if (len(stack) > 1):
lenStack = len(stack)-1
for x in range(0, lenStack):
stack.append('+')
stack.append(_calcSum(stack))
return stack.pop()
def _calcSum(stack):
newStack = []
for a in stack:
if type(a) is float:
newStack.append(a)
continue
op1, op2 = newStack.pop(), newStack.pop()
if a == '+':
newStack.append(op2 + op1)
elif a == '-':
newStack.append(op1 - op2)
elif a == '*':
newStack.append(op2 * op1)
elif a == '/':
newStack.append(op1/op2)
return newStack.pop()
Однако у меня возникают проблемы с утверждением NOT и POWER; Я не могу понять, как автоматически проверять их. Может ли кто-нибудь указать мне в правильном направлении или помочь с моим кодом? Когда я пытаюсь проверить «власть», он просто пропускает остальную часть моего кода и пытается распечатать стек, который пуст, вызывая ошибку.
Не могли бы вы опубликовать [ MCVE] (http://stackoverflow.com/help/mcve)? – Christian
@Christian Я не уверен, что еще вам нужно? Я опубликовал код, который используется при репликации моей проблемы. – Craig
Я думаю, что он имеет в виду для вас чтобы точно определить, что не работает для вас, и что вы пытались, а не публиковать весь ваш скрипт. – user3467349