系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 Python:3.6.0
Part 1:示例
'max(a,b,c,d,e)'
a,b,c,d,e
分别表示P1-P5点,{'a': 'P1', 'b': 'P2', 'c': 'P3', 'd': 'P4', 'e': 'P5'}
P1-P5
的取值,求这个公式得到的结果Part 2:步骤
a
的。所以第1步是将max
这种函数替换为大写的MAX
MAX
为max
eval
函数结果
Part 3:代码
dict_input_1 = {'P1': 1, 'P2': 2, 'P3': 3, 'P4': 4, 'P5': 15}
dict_input_2 = {'P1': 3, 'P2': 2, 'P3': 3, 'P4': 4, 'P5': 5}
dict_input_3 = {'P1': 9, 'P2': 2, 'P3': 3, 'P4': 4, 'P5': 5}
def replace_with_upper(formula_info):
dict_number_info = {"abs": "ABS", "max": "MAX", "min": "MIN"}
for ky in dict_number_info:
val = str(dict_number_info[ky])
formula_info = formula_info.replace(ky, val)
return formula_info
def replace_with_lower(formula_info):
dict_number_info = {"ABS": "abs", "MAX": "max", "MIN": "min"}
for ky in dict_number_info:
val = str(dict_number_info[ky])
formula_info = formula_info.replace(ky, val)
return formula_info
def replace_with_dict(formula_info, dict_number_info):
for ky in dict_number_info:
val = str(dict_number_info[ky])
formula_info = formula_info.replace(ky, val)
return formula_info
def get_max(dict_input):
# 已知条件
formula_info = 'max(a,b,c,d,e)'
dict_map = {'a': 'P1', 'b': 'P2', 'c': 'P3', 'd': 'P4', 'e': 'P5'}
# 第1步:替换关键函数,因为除关键函数的因变量中含有与max等相同的字母
formula_info_1 = replace_with_upper(formula_info)
print('formula_info_1=', formula_info_1)
# 第2步:替换各变量
formula_info_2 = replace_with_dict(formula_info_1, dict_map)
print('formula_info_2=', formula_info_2)
# 第3步:替换回关键函数
formula_info_3 = replace_with_lower(formula_info_2)
print('formula_info_3=', formula_info_3)
# 第4步:替换值
formula_info_4 = replace_with_dict(formula_info_3, dict_input)
print('formula_info_4=', formula_info_4)
result = eval(formula_info_4)
return result
# 计算1
print('\n', '计算1')
result_1 = get_max(dict_input_1)
print('结果是', result_1)
# 计算2
print('\n', '计算2')
result_2 = get_max(dict_input_2)
print('结果是', result_2)
# 计算3
print('\n', '计算3')
result_3 = get_max(dict_input_3)
print('结果是', result_3)
代码截图
Part 4:部分代码解读
eval(formula_info_4)
,将字符串直接转换为公式,并进行运算得出结果eval
是将字符串直接转换为表达式,所以在开放的环境下不建议使用,防止被不友好的人利用。但自己个人使用是没有问题的扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有