#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)