前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小案例-01-字符串转计算公式

小案例-01-字符串转计算公式

作者头像
zishendianxia
发布2021-03-22 15:12:44
6620
发布2021-03-22 15:12:44
举报
文章被收录于专栏:Python工程师Python工程师

系统: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:步骤

  1. 考虑公式中的自变量为小写的a,b,c,d,e,但计算函数如max中也是含有a的。所以第1步是将max这种函数替换为大写的MAX
  2. 将公式中的a,b,c,d,e替换为实际的点名,P1-P5
  3. 替换公式中的MAXmax
  4. 执行eval函数

结果

Part 3:代码

代码语言:javascript
复制
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:部分代码解读

  1. eval(formula_info_4),将字符串直接转换为公式,并进行运算得出结果
  2. 这里需要强烈一下,因为eval是将字符串直接转换为表达式,所以在开放的环境下不建议使用,防止被不友好的人利用。但自己个人使用是没有问题的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档