Почему я не могу набрать sh кратное число git в стеке для вычисления префикса? - PullRequest
1 голос
/ 05 апреля 2020

Я пишу программу, в которой я преобразую функцию в префикс и вычисляю.

from pythonds.basic import Stack

def doMath(op, op1, op2):

    if op == "*":
        return int(op1) * int(op2)

    elif op == "/":
        return int(op1) / int(op2)

    elif op == "+":
        return int(op1) + int(op2)

    elif op == "-":
        return int(op1) + int(op2)

def postfixEval(postfixExpr):

    operandStack = Stack()
    tokenList = postfixExpr.split()

    for token in tokenList:
        print(tokenList)
        print("this is token: ", token)

        if token in "0123456789":
            operandStack.push(token)
            print("pop: ",operandStack.peek())

        elif not operandStack.isEmpty():
            operand2 = operandStack.pop()
            operand1 = operandStack.pop()
            result = doMath(token, operand1, operand2)
            print (result)
            operandStack.push(result)

    return operandStack.pop()

print(postfixEval('7 8 + 3 2 + /'))
print(postfixEval("17 10 + 3 * 9 /"))

Поэтому, когда я запускаю первый postfixEval, он возвращает 3.0, но при втором выводе возвращает IndexError: pop from empty list Очевидно, это b c из 2 di git чисел, как я могу это исправить?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Когда вы пытаетесь:

if token in "0123456789":
    operandStack.push(token)

для token = 17, это не будет работать, поскольку 17 не в 0123456789.
Так что измените его на:

try:
    if float(token):
        operandStack.push(token)
except:
    #your code here

КАК ЭТО РАБОТАЕТ:
Когда передается тип str, содержащий цифры и числа, float() пытается преобразовать его в число с плавающей точкой. Это возможно только в том случае, если это число.

0 голосов
/ 05 апреля 2020

Заменить if token in "0123456789" (проверяет, является ли token подстрока "0123456789") на if token.isdigit() (проверяет, состоит ли token из десятичных цифр).

...