2017-05-08 85 views
0

我采用了一个函数来评估由数字和数学表达式组成的字符串列表,但是我无法获得预期的结果。 例如:5 + 2-3 + 2 = 6对数学表达式出错的评估:python

基本上,函数通过初始化结果初始化第一个数字输入(Inp)的值开始。然后,将操作从左到右应用到当前结果等等,直到获得最终结果。 以下是脚本。

Inp = ["5","+","2","-","3","+","2"] 

result = Inp [0] 
for i in range (1, len(Inp), 2): 
    op = Inp [i] 
    nextValue = Inp [i + 1] 
if op == '+': 
    result += nextValue 
elif op == '-': 
    result -= nextValue 
return result 

回答

2

你的代码有几个问题。

1)您将Inp的第一个元素设置为result。但Inp[0]基本上是一个字符串。所以在分配之前将它转换为整数。

2)ifelse应该是for循环内。缩进不正确。

3)同样喜欢1语句的情况下,内部if问题else

4)有没有功能(按你定的代码)。无需返回。如果它确实是一个功能,并且这是一个最小版本,那么它就可以。

然后正确的代码将是 -

Inp = ["5","+","2","-","3","+","2"] 

result = int(Inp [0]) 
for i in range (1, len(Inp), 2): 
    op = Inp [i] 
    nextValue = Inp [i + 1] 
    if op == '+': 
     result += int(nextValue) 
    elif op == '-': 
     result -= int(nextValue) 

print result 

也在里面ifelse你可能要检查是否nextValue确实是一个数

还有其他的方法可以做到你想要什么。我只是指出了错误,并将您的代码更改为功能性代码。

1

我想一个简单的方法是先取得第一个操作数,然后循环遍历整个列表。不要忘了,你得值从字符串转换为整数,另有5 + 2将会是52岁,而不是7:

data = ["5","+","2","-","3","+","2"] 
result = int(data[0]) 

for op, n in zip(data[1:][::2], data[1:][1::2]): 
    if op == '+': 
    result += int(n) 
    if op == '-': 
    result -= int(n) 

print(result) 

的核心思想是for循环。它的工作原理是利用切片:

  • data[1:]这是你最初的名单,减去第一个元素(我们已经使用)
  • [::2]意味着“所有其他元素”
  • [1::2]意味着“所有其他元素,但跳过第一个”

我们zip()这两个列表以获得对运营商和操作数,像这样:

>>> for a in zip(data[1:][::2],data[1:][1::2]): 
... print(a) 
... 
('+', '2') 
('-', '3') 
('+', '2') 

这是循环遍历列表的安全方式,因为我们不必担心循环超出列表的末尾。

逻辑的其余部分与您的相同,只是您忘记将值转换为整数。

0
Inp = ["5","+","2","-","3","+","2"] 
def f(Inp): 
result = int(Inp [0]) 
for i in range (1, len(Inp), 2): 
    op = Inp [i] 
    nextValue = int(Inp [i + 1]) 
    if op == '+': 
     result += nextValue 
    elif op == '-': 
     result -= nextValue 
return result 

print(f(Inp)) 
0

这段代码遇到了一些问题:首先你有一些缩进问题。 for循环中的所有内容都应缩进一个空格。 其次,return语句不起作用,除非你在函数内部。这里没有函数定义,所以你可以做的最好的是打印它。最后,你在引号中使用数字,比如“5”,它将5变成一个字符串,而不是把它看作一个数字。这里是这个工作的版本:

Inp = [5,"+",2,"-",3,"+",2] 

result = Inp [0] 
for i in range (1, len(Inp), 2): 
    op = Inp [i] 
    nextValue = Inp [i + 1] 
    if op == '+': 
     result += nextValue 
    elif op == '-': 
     result -= nextValue 

print(result)