【问题标题】:extract number from exponent in Python从Python中的指数中提取数字
【发布时间】:2017-06-12 06:26:41
【问题描述】:

大家好 / Python 大师

我想知道如何完成以下任务,到目前为止我一直无法做到。

这是我所拥有的:

Q1 = 20e-6

现在这是一个指数数字,如果您按原样打印(Q1),它将显示:2e-5,这很好。从数学上讲。

但是,这就是我想要做的:

我希望 Q1 只打印数字 20。并根据这是否是 e-6 然后打印 uC 或者如果这个 e-9 打印 nC。

下面是一个更好理解的例子:

Q1=20e-6

当我运行 print(Q1) 时显示:20uC。

Q2=20e-9

当我运行 print(Q2) 时显示:20nC。

你能帮我解决这个问题吗?

【问题讨论】:

  • 这里只需要考虑 6 和 9 的指数幂吗?
  • 是的,e-6 必须等于 uC,e-9 必须等于 nC。不应考虑其他指数幂。
  • 我认为 python 数字默认为最大可能的指数。正如数学中的惯例,尾随零被删除并以更高指数的形式添加。我认为您必须首先准备好您的数字,将它们转换成字符串并在数千个括号中为它们提供所需的“外观”。

标签: python python-2.7 vpython


【解决方案1】:

只需使用 str.replace 替换指数:

q1 = 'XXXXXX'
q1 = q1.replace('e-9', 'nC').replace('e-6', 'uC')
print(q1)

【讨论】:

  • 这是我从您的代码中得到的: q1= 20e-6 q1=str(q1) q1 = q1.replace('e-6','uC') print(q1) 输出: 2e-05 同样的问题
  • 你的 q1 没有被声明为字符串吗?
  • python 变量未声明为某种数据类型。它们根据存储在其中的值来调整数据类型。这个特定的值被存储为浮点数。因此,为什么我之后将其转换为 STRING 以便之后可以调用替换函数。不过还是没有什么不同。
  • 请原谅我的措辞,我的意思是如果您将 q1 实例化为 q1='20e-6',我和其他回答者认为是这种情况
  • 抱歉不清楚,不幸的是,代码不应该像你说的那样明确地声明这个变量为字符串。用户应该只输入数值,例如 20e-6(不带引号),其余的让 python 计算出来。因此头痛。
【解决方案2】:

我建议您使用si-prefix

你可以使用pip来安装它:

sudo pip install si-prefix

然后你可以使用这样的东西:

from si_prefix import si_format

# precision after the point
# char is the unity's char to be used
def get_format(a, char='C', precision=2):
    temp = si_format(a, precision)

    try:
        num, prefix = temp.split()
    except ValueError:
        num, prefix = temp , ''

    if '.' in num:
        aa, bb = num.split('.')
        if int(bb) == 0:
            num = aa

    if prefix:
        return num + ' ' + prefix + char
    else:
        return num


tests = [20e-6, 21.46e05, 33.32e-10, 0.5e03, 0.33e-2, 112.044e-6]
for k in tests:
    print get_format(k)

输出:

20 uC
2.15 MC
3.33 nC
500
3.30 mC
112.04 uC

【讨论】:

    【解决方案3】:

    你可以尝试拆分字符串:

    '20e-9'.split('e')
    

    给予

    ['20', '-9']
    

    从那里开始,您可以在这些值之间插入任何您想要的内容:

    ('u' if int(a[1]) > 0 else 'n').join(a)
    

    (与a = '20e-9'.split('e')

    【讨论】:

    • 这是我从您的代码中得到的: q1= 20e-6 q1=str(q1) q1 = q1.split('e') print(q1) 输出: ['2', ' -05'] 略有不同的问题
    【解决方案4】:

    你不能。您正在寻找的行为称为“猴子修补”。这对于 int 和 float 是不允许的。

    你可以参考这个stackoverflow question

    我能想到的唯一方法是创建一个扩展 float 的类,然后实现一个 __str__ 方法,该方法根据您的要求显示。

    -------更多解释-----

    如果你输入

    Q1 = 20e-6

    在python shell中,然后

    type(Q1) 你会得到一个

    float

    所以基本上你的 Q1 被 python 类型系统视为浮点数

    当你输入 print(Q1) 调用float的_str__方法

    扩展核心类的过程是“猴子补丁”的一个例子,这就是我所指的。

    现在的问题是你不能在 python 中“猴子补丁”(或者如果你愿意,可以扩展)核心类(你可以在某些语言中,比如在 Ruby 中)。

    [int、float 等是核心类,用 C 语言编写,用于最常见的 Python 发行版。]

    那你是怎么解决的呢?

    你需要像这样创建一个新类

    class Exponent(float): def init(self, value): self.value = value def __str__(self): return "ok"

    x = Exponent(10.0)
    print(x) ==> "ok"
    

    希望对你有帮助

    【讨论】:

    • 我不知道你刚才说了什么,但感谢您的意见。
    • 请检查一下我已经用代码添加了更多解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    相关资源
    最近更新 更多