Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 将数学表达式解析为;3+;2*临时和#x2B;湿度;,其中,替换有效载荷中的alpha值_Python_Pyparsing - Fatal编程技术网

Python 将数学表达式解析为;3+;2*临时和#x2B;湿度;,其中,替换有效载荷中的alpha值

Python 将数学表达式解析为;3+;2*临时和#x2B;湿度;,其中,替换有效载荷中的alpha值,python,pyparsing,Python,Pyparsing,数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3+2*温度+湿度”。变量必须查找json,并由json中的值替换 environment = {"temp": 23, "humidity": 12, "airpressure":21.12} expression = '3 + 2 * temp + humidity' 我看到的回应是'3+2*23+12. 由于我刚刚开始探索pyparsing,我找不到解决方案。您可以

数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3+2*温度+湿度”。变量必须查找json,并由json中的值替换

environment = {"temp": 23, "humidity": 12, "airpressure":21.12}
expression = '3 + 2 * temp + humidity'
我看到的回应是
'3+2*23+12.


由于我刚刚开始探索
pyparsing
,我找不到解决方案。

您可以使用正则表达式查找变量,然后使用
re.sub
将每个匹配的变量替换为其值:

import re

environment = {"temp": 23, "humidity": 12, "airpressure":21.12}
expression = '3 + 2 * temp + humidity'

def replace_var(m):
    return str(environment[m.group(0)])

def replace_vars(expression):
    return re.sub(r'[a-z]+', replace_var, expression)  # assuming your variables are all lowercase

print(replace_vars(expression))
# 3 + 2 * 23 + 12

如果
环境
中不存在变量,这将引发
键错误
,您可以将
环境
字典的键转换为正则表达式,然后用相应的值替换它们:

def resolve_vars(expression, environment):
    regex = r"\b({})\b".format("|".join([re.escape(k) for k in environment]))
    repl = lambda s: str(environment.get(s.group(), s.group()))
    return re.sub(regex, repl, expression)

我不会投赞成票,也不会投反对票,但社区成员肯定会要求您展示您迄今为止所做的尝试。您是否只想用数字
23
12
替换字符串
'temp'
'湿度'
,或者您还想将结果字符串
'3+2*23+12'
作为算术表达式进行求值以得到数字61?顺便说一句,您可能想看看这个类似(但更复杂)的问题: