在列表中计算值有一个有趣的任务。
[2025, 'minus', 5, 'plus', 3]
2023
[2, 'multiply', 13]
26
有关如何在python3中实现它的任何建议?
正如@roganjosh所建议的那样,创建一个dict并执行操作
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
解
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
评论
这将遵循代码并按照它们呈现的顺序处理运算符,不确定您是否要遵循操作顺序,没有提及它。
首先,我创建了一个字典,将字符串转换为实际的运算符(注意除法必须是truediv
或floordiv
)。
然后使用for循环,如果problem
中的项是运算符之一。然后将字符串转换为适当的运算符(problem[i] = string_operator[problem[i]]
它将采用运算符之前的值(i-1
)和(i+1
)并计算它们
(Qazxswpoi。
为了保持计算的进行,我将该输出存储在所述运算符(solution = problem[i](problem[i-1], problem[i+1])
)之后的项目中,您的设置将是下一个运算符之前的项目,这将允许该过程继续。
为了娱乐
i+1
problem = [26, "multiply", 100, "divide", 2, "plus", 40, "minus", 3]
:)