Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 - Fatal编程技术网

Python 如何将字符串解析为变量/函数/浮点/整数赋值/值?

Python 如何将字符串解析为变量/函数/浮点/整数赋值/值?,python,Python,我想写一个求和函数,但不知道如何解析底部表达式和右侧表达式 def求和(计数:float,底部变量:str,espression:str): out=0 对于底部变量中的字符: 通过 对于表达式中的字符: 通过 我希望您能够以与正常西格玛符号相同的方式使用输入,如bottom\u var是'n=13',而不是'13' 编辑: 澄清一下,我的意思是,我希望有人能够在bottom\u var下输入赋值,然后在expression中使用它,而不是在其他地方 例如: 求和(4,'x=1,'x+1')

我想写一个求和函数,但不知道如何解析底部表达式和右侧表达式

def求和(计数:float,底部变量:str,espression:str):
out=0
对于底部变量中的字符:
通过
对于表达式中的字符:
通过
我希望您能够以与正常西格玛符号相同的方式使用输入,如
bottom\u var
'n=13'
,而不是
'13'

编辑: 澄清一下,我的意思是,我希望有人能够在
bottom\u var
下输入赋值,然后在
expression
中使用它,而不是在其他地方

例如:

求和(4,'x=1,'x+1')
(将返回14,作为2+3+4+5=14)

python中有一些内置函数,它们执行
text
str
中的代码,这些函数是
exec()
eval()
函数

例如:

>>> exec('n=13')
>>> print(n)
13
>>> eval('n+1')
14
您可以在代码中使用它。

我就是这样做的:

def summation(count,bottom_var,expression):
    begin = False
    x = ""
    
    v = ""
    
    for char in bottom_var:
        if begin:
            x += char
    
        if char == "=":
            begin = True
    
        if begin == False:
            v += char
    
    x = int(x)
    
    expression = expression.replace(v,str("x"))
    
    print(expression)
    
    for n in range(count):
        x = eval(expression)
    
summation(4,"d=152",'d+145*2')

首先,解析
bottom\u var
以获取符号和起始值:

var,value=bottom\u var.split('='))
var=var.strip()
值=评估(值)
使用这个函数,我们很容易得到等号的两部分。我们甚至允许使用任意数量的空格,比如
x=1

然后,我们要创建一个从起始值到计数的循环:

范围内i的
(值,计数+1):
...
最后,我们希望在每次用当前迭代的值替换符号时,使用循环对
表达式
求和。总而言之:

def求和(计数:int,底部变量:str,表达式:str):
变量,值=底部变量拆分('='))
var=var.strip()
值=评估(值)
res=0
对于范围内的i(值,计数+1):
res+=eval(expression.replace(var,str(i)))
返回res
例如:

>>> summation(4, 'x=1', 'x+1')
14


提出这个答案中的代码,我觉得有必要请您阅读,并确保它适合您的应用程序。请注意,根据代码使用的上下文,使用
eval
可能非常危险,并导致糟糕的结果。

与我的意思不完全一致,请重新阅读我的编辑。如果
x=1
,则
x+1
等于
2
,而不是
5
。这一点在问题中并不清楚,也没有反映在预期的答案中。。。如果
x=2
?会是
2+1+1+1+1
?@Tomerikoo不会。但我确实把答案搞乱了。我会重新写的。我想你的问题不是很清楚。我很了解西格玛符号,直到现在才明白你的意思…@Tomerikoo不清楚怎么办?上面只打印了
x+145*2
。。。不确定这是否是预期的结果output@Tomerikoo最后我忘了添加return x,它返回所需的输出。它几乎可以正常工作,但不支持更复杂的变量定义。我所知道的完成这项工作的唯一方法是将
value=int(value)
替换为
value=int(eval(value))
,所以我这样做了。它也不允许浮点数,因为它们被转换成整数,但我看不出你的方法可以解决这个问题。听起来不错,但你的意思是像
x=2z
?这是不“可评估的”。也许
x=2*z
。但是,
z
必须是一个整数,并且结果必须小于
计数
我认为用sigma表示法不能接受浮点数…我修正了你提到的第一件事(现在可以做
x=2*z
),但是对于你的第二个问题,它不适用。底值和顶值必须是整数。它们代表一个索引。。。我意识到这已经很老了,但我有另一个问题,可能需要改变。我需要
eval()
语句返回类型
decimal.decimal
。如何做到这一点?