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

2024-09-24 22:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我采用了一个函数来计算由数字和数学表达式组成的字符串列表,但无法得到预期的结果。 例如: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

Tags: 函数字符串in脚本列表forlen表达式
3条回答

我想一个简单的方法是把第一个操作数取出来,然后按两个循环遍历这个列表。别忘了,您必须将值从字符串转换为整数,否则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')

这是一种在列表中循环的安全方法,因为我们不必担心循环超出列表的末尾。你知道吗

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

你的代码中有几个问题。你知道吗

1)将Inp的第一个元素作为result。但是Inp[0]基本上是一个字符串。所以在赋值之前把它转换成整数。你知道吗

2)ifelse应该在for循环内。缩进不正确。你知道吗

3)在ifelse内的语句的情况下,类似于1的问题

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是否确实是一个数字

有其他方法可以做你想做的事。我只是指出了错误,并将您的代码更改为功能性代码。你知道吗

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

相关问题 更多 >