вывести сумму всех целых чисел, используя порядок операторов, установленный в строке в Python

#python-3.x

#python-3.x

Вопрос:

как найти сумму строки, содержащей операторы ‘1 20/15-560*21 ‘ без использования правила BODMAS. Мой код хорошо работает для однозначного числа, в то время как он терпит неудачу, когда дело доходит до многозначного числа. я приложил свое решение для однозначного числа

 var = '1 2/3-4*5/5*2'
sumOfNum = var[0]
ch = ' -/*'
num = 0
value = ''
for i in range (1,len(var)):
    if var[i] in ch:
       inte = i
       i = i 1
       if var[inte] == ' ':
          sumOfNum = int(sumOfNum)   int(var[i])
       if var[inte] == '/':
           sumOfNum = int(sumOfNum) / int(var[i])
       if var[inte] == '-':
            sumOfNum = int(sumOfNum) - int(var[i])
       if var[inte] == '*':
             sumOfNum = int(sumOfNum) * int(var[i])
print(some)
    
  

Комментарии:

1. eval функция вычисляет выражения. Попробуйте eval("1 20/15-560*21")

2. спасибо за вашу помощь, но я не хочу использовать предопределенную функцию

Ответ №1:

я попробовал и получил результат

 var = '1000 12/30-4*5/15000000*220 20000-15000000*220 20000 1000 12/30-4*5/15000000*220 20000-15000000*220 20000'
some = var[0]
inte = 0
ch = ' -/*'
num = 0
value = ''
lst =[]
for i in range (0,len(var)):
    if var[i] in ch:
        inte = i
        lst.append(value)
        lst.append(var[inte])
        value = ''
    else:
        value = value var[i]
    i =1
lst.append(value)

def sumOfAllNum(arg1, operand, arg2):
    if operand == ' ':
        sumOfVal = arg1   arg2
    if operand == '-':
        sumOfVal = arg1 - arg2
    if operand == '*':
        sumOfVal = arg1 * arg2
    if operand == '/':
        sumOfVal = arg1 / arg2
    return sumOfVal
FinalSum = 0

sumOfVal = int(lst[0])
j = 0
for j in range(1,len(lst)):
    if lst[j] in ch:
        sumOfVal = sumOfAllNum(sumOfVal, lst[j], int(lst[j 1]))
print(sumOfVal)