Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数,该函数将字符串作为输入,像计算器一样对其求值并返回整数答案_Python_Python 3.x_Python 2.7 - Fatal编程技术网

Python 函数,该函数将字符串作为输入,像计算器一样对其求值并返回整数答案

Python 函数,该函数将字符串作为输入,像计算器一样对其求值并返回整数答案,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我正在尝试实现一个函数,它接受字符串输入,比如“1+2-3”或“-2+2”,像计算器一样计算它并返回整数答案 在本例中,两个输入都将返回0。我们可以假设只有+或-运算符(没有多/除/或任何其他运算符),并且输入格式良好,因此我们不需要进行任何验证(即,始终是交替运算符/操作数) 我需要它,而不需要使用现有的Python函数,如calc()等。相反,我尝试开发一个简单的代码来实际实现这一点 我的代码是 d =  {} sum = 0 for index, value in enumerate(s)

我正在尝试实现一个函数,它接受字符串输入,比如“1+2-3”或“-2+2”,像计算器一样计算它并返回整数答案

在本例中,两个输入都将返回0。我们可以假设只有+或-运算符(没有多/除/或任何其他运算符),并且输入格式良好,因此我们不需要进行任何验证(即,始终是交替运算符/操作数)

我需要它,而不需要使用现有的Python函数,如calc()等。相反,我尝试开发一个简单的代码来实际实现这一点

我的代码是

d =  {}
sum = 0
for index, value in enumerate(s):
   if value.isdigit():
           pass
   else:
           if not value.isdigit():
                   d[index] = int(s[index]+s[index+1])


for i in d.values():
   sum += i
但它只适用于“-2+2”的情况


我怎样才能使它也适用于“1+2-3”的情况。

python的方法是使用
eval

eval("-2+2")
eval("1+2-3")
如果你想按自己的方式实施,那么

def f(s):
   s = s.replace('-', ' -')
   s = s.replace('+', ' +')
   l = s.split(" ")
   sum = 0
   for num in l:
       sum = sum + float(num)
   return sum
s = "4747-74+484-44"
print (f(s))
# output: 5113.0

使用正则表达式非常简单
re.finditer(r'([+-]?\d'),d)
将查找所有出现的可能前面有符号的单位数。在
[+-]?\d
之后添加一个
+
,您也可以计算多位数

import re

d = '-2+2'    
total = sum(int(i.group()) for i in re.finditer(r'([+-]?\d+)', d))

由于您只考虑加法和减法,以下解决方案适用于上述任何示例:

def calculate(s):
   sWithAdd = s.replace('-', '+-')
   numbers = sWithAdd.split('+')
   return sum([int(i) for i in numbers if i != ''])

t = '1+2-32+64-71'
print(calculate(t)) #Prints -36, the correct answer
上述代码按以下步骤工作:

  • 首先,对于字符串中的所有
    -
    (减号),我们将它们替换为
    +-
    。我们示例的结果字符串变成,
    1+2+-32+64+-71
    。我们这样做的原因是将我们的输入转换成一系列的数字相加
  • 然后,我们在
    +
    上拆分字符串,只给我们简单地添加的数字
  • 最后,我们使用python中的
    sum
    函数对列表中的所有数字求和。如果需要,您可以为此目的使用自定义for循环

  • 您在代码中有正确的想法,但正试图通过引用
    字符串
    中的下一个
    字符
    有效地添加到
    ,这将您限制为
    字符串
    的形式:

    .a.b
    
    其中
    +
    -

    您要做的是迭代
    字符串中的每个
    字符
    ,如果该
    字符
    加号
    减号
    (即不是
    数字
    ),则将乘法变量分别更改为
    1
    -1
    。然后,每当你到达一个实际的数字进行加法或减法时,你只需将该数字乘以乘法值即可

    下面是上述逻辑的代码:

    s = "1+2-3"
    m = 1
    sm = 0
    for c in s:
        is c.isdigit():
            sm += m * int(c)
        else:
             m = -1 if c == "-" else 1
    
    sm
    输出为:

    0
    


    请记住,这仅在
    字符串
    操作
    数字
    之间交替时有效,OP需要一种自定义方法来计算结果,而不是使用任何现有的Pythonfunctions@ThePretendProgrammer这不是使用python代码的正确方法。这是python中最糟糕的编码方式。我们应该简化代码,而不应该使其复杂化。我并不是完全赞扬OP的编码风格,只是指出他要求手工编写计算逻辑。我们可以在自己编写计算逻辑时简化代码:)。感谢您的快速响应。但是,我需要它而不使用现有的Python函数hanks@anjaneyulubata。获取TypeError:“int”对象不可用callable@Rajan请接受吧!这就是网站的工作原理:)我是新来的。你能告诉我如何接受这个答案吗?@Rajan我的答案左边有一个小的灰色勾号,当你按下它时它变成绿色,表示这个答案解决了你的问题problem@Rajan非常感谢。谢谢@ThePretendProgrammer