热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在python中使用人类可读单元评估数学表达式?

如何解决《如何在python中使用人类可读单元评估数学表达式?》经验,为你挑选了1个好方法。

有没有办法从包含人类可读数字单位的字符串中计算表达式?

例如:

myformula='1u+1e-6'
result = eval(myformula)

......应该等于1e-6+1e-6(其中u = micro).



1> Zero Piraeus..:

这个答案在一定程度上扩展了Joran,用适当的指数代替所有的SI事务:

import re

SI = {
    "T": 12,
    "G": 9,
    "M": 6,
    "k": 3,
    "h": 2,
    "da": 1,
    "d": -1,
    "c": -2,
    "m": -3,
    "u": -6,
    "n": -9,
    "p": -12,
}

SI_REGEX = re.compile(r"(?<=\d)(%s)\b" % "|".join(SI))

def repl_si(match):
    return "e%d" % SI[match.group()]

def defix(formula):
    return re.sub(SI_REGEX, repl_si, formula)

使用字典SI,我们创建一个正则表达式,它将匹配任何键,SI只要它们前面有一个数字,后跟一个单词边界:

(?<=\d)(T|G|M|k|h|da|d|c|m|u|n|p)\b

接下来,我们定义一个替换函数 repl_si(),用于查找匹配SI并将其替换为与"e"指数连接.

然后,我们要做的就是编写一个函数,re.sub()使用正则表达式,替换函数和公式适当调用,并且vo:

>>> defix("1T + 2G + 3M + 4k + 5h + 6da + 7d + 8c + 9m + 1u + 2n + 3p")
'1e12 + 2e9 + 3e6 + 4e3 + 5e2 + 6e1 + 7e-1 + 8e-2 + 9e-3 + 1e-6 + 2e-9 + 3e-12'

现在您需要做的就是调用eval()结果,当然您绝对不应该使用用户提供的输入.


推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 解决Python中 'NoneType' 对象无属性 'find_all' 错误
    本文详细探讨了在Python编程中遇到的常见错误——'NoneType'对象没有属性'find_all',并深入分析其原因及解决方案。通过理解find_all函数的工作原理和常见用法,帮助读者避免类似问题。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
author-avatar
201153蜡笔小新
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有