Python 函数,该函数将字符串作为输入,像计算器一样对其求值并返回整数答案
我正在尝试实现一个函数,它接受字符串输入,比如“1+2-3”或“-2+2”,像计算器一样计算它并返回整数答案 在本例中,两个输入都将返回0。我们可以假设只有+或-运算符(没有多/除/或任何其他运算符),并且输入格式良好,因此我们不需要进行任何验证(即,始终是交替运算符/操作数) 我需要它,而不需要使用现有的Python函数,如calc()等。相反,我尝试开发一个简单的代码来实际实现这一点 我的代码是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)
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
。我们这样做的原因是将我们的输入转换成一系列的数字相加+
上拆分字符串,只给我们简单地添加的数字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