数学表达式出错的求值:python

数学表达式出错的求值:python,python,math,iterator,iteration,Python,Math,Iterator,Iteration,我采用了一个函数来计算由数字和数学表达式组成的字符串列表,但无法得到预期的结果。 例如:5+2-3+2=6 基本上,函数从初始化第一个数字输入(Inp)的结果值开始。然后,它将从左到右的操作应用于当前结果,依此类推,直到得到最终结果。 下面是脚本 Inp = ["5","+","2","-","3","+","2"] result = Inp [0] for i in range (1, len(Inp), 2): op = Inp [i] nextValue = Inp [i

我采用了一个函数来计算由数字和数学表达式组成的字符串列表,但无法得到预期的结果。 例如:5+2-3+2=6

基本上,函数从初始化第一个数字输入(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

您的代码中有几个问题

1) 您将
Inp
的第一个元素作为
result
。但是
Inp[0]
基本上是一个字符串。因此,在赋值之前将其转换为整数

2)
if
else
应该在
for
循环中。压痕不正确

3) 如果
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
同样在
if
else
中,您可能需要检查
nextValue
是否确实是一个数字


还有其他方法可以做你想做的事。我刚刚指出了错误,并将代码更改为功能代码。

您的代码中有几个问题

1) 您将
Inp
的第一个元素作为
result
。但是
Inp[0]
基本上是一个字符串。因此,在赋值之前将其转换为整数

2)
if
else
应该在
for
循环中。压痕不正确

3) 如果
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
同样在
if
else
中,您可能需要检查
nextValue
是否确实是一个数字


还有其他方法可以做你想做的事。我只是指出了错误,并将代码更改为函数式代码。

我认为一个简单的方法是去掉第一个操作数,然后两个一个地在列表中循环。不要忘记,必须将值从字符串转换为整数,否则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:][/code>这是您的初始列表,减去第一个元素(我们已经使用过)
  • [::2]
    表示“每隔一个元素”
  • [1::2]
    表示“每隔一个元素,但跳过第一个”
我们使用
zip()
两个列表来获得一对运算符和操作数,如下所示:

>>> for a in zip(data[1:][::2],data[1:][1::2]):
...   print(a)
...
('+', '2')
('-', '3')
('+', '2')
这是一种安全的列表循环方式,因为我们不必担心循环超出列表的末尾


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

我想一个简单的方法是先去掉第一个操作数,然后在列表中按两个循环。不要忘记,必须将值从字符串转换为整数,否则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)
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))
核心思想是for循环。它通过使用切片来工作:

  • data[1:][/code>这是您的初始列表,减去第一个元素(我们已经使用过)
  • [::2]
    表示“每隔一个元素”
  • [1::2]
    表示“每隔一个元素,但跳过第一个”
我们使用
zip()
两个列表来获得一对运算符和操作数,如下所示:

>>> for a in zip(data[1:][::2],data[1:][1::2]):
...   print(a)
...
('+', '2')
('-', '3')
('+', '2')
这是一种安全的列表循环方式,因为我们不必担心循环超出列表的末尾


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

此代码有几个问题:首先,缩进有一些问题。for循环中的所有内容都应该缩进一个空格。
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))
其次,除非您在函数内部,否则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)

这段代码有几个问题:首先,缩进有一些问题。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)