用运算符计算数字列表

时间:2018-08-31 15:08:57

标签: python python-3.x

有一个有趣的任务来计算列表中的值。

[2025, 'minus', 5, 'plus', 3] 
  

2023

[2, 'multiply', 13]
  

26

有人建议如何在python3中实现它吗?

2 个答案:

答案 0 :(得分:2)

按照@roganjosh的建议创建字典并执行操作

import operator
ops = { "plus": operator.add, "minus": operator.sub,'multiply':operator.mul, 'divide':operator.div } 
a=[2025, 'minus', 5, 'plus',3] 
try:
    val=int(a[0])
    stack=[]
    error=False

    for i in range(1,len(a)):
        if isinstance(a[i],str):
            stack.append(a[i])
        if isinstance(a[i],int):
            temp_operator =stack.pop()
            operation=ops.get(temp_operator)
            val=operation(val,a[i])
except Exception:
    print('Invalid input')
    error=True
if(stack):
    print('Invalid input')
    error=True
if(not error):
    print(val)

输出

2023

答案 1 :(得分:1)

解决方案

import operator

string_operator = {
    "plus" : operator.add,
    "minus" : operator.sub,
    "multiply" : operator.mul,
    "divide" : operator.truediv}

problem = [2025, "minus", 5, "plus", 3]

for i in range(len(problem)):
    if problem[i] in string_operator.keys():
        problem[i] = string_operator[problem[i]]
        solution = problem[i](problem[i-1],problem[i +1])
        problem[i+1] = solution

print(solution)

输出

(xenial)vash@localhost:~/python$ python3 helping.py  
2023

problem = [2, "multiply", 13]

(xenial)vash@localhost:~/python$ python3 helping.py 
26

评论

这将遵循代码并按照出现的顺序处理操作符,不确定是否要遵循操作顺序,没有提及。

首先,我创建了一个字典,将字符串转换为实际的运算符(注意分隔必须为truedivfloordiv)。

如果problem中的项目是运算符之一,则使用for循环。然后,该字符串将被转换为适当的运算符(problem[i] = string_operator[problem[i]],它将采用(i-1和(i+1)运算符之前的值并进行计算

({solution = problem[i](problem[i-1], problem[i+1])

为使计算继续进行,然后将输出存储在所述运算符(i+1)之后的项中,根据您的设置,该输出将是下一个运算符之前的项,这将使过程继续进行。 / p>

好玩

problem = [26, "multiply", 100, "divide", 2, "plus", 40, "minus", 3]
(xenial)vash@localhost:~/python$ python3 helping.py 
1337

:)