从Python

时间:2017-06-12 06:26:41

标签: python python-2.7 vpython

大家好/ Python大师

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

这就是我所拥有的:

  

Q1 = 20e-6

现在这是一个指数数字,如果你打印(Q1)就会显示:2e-5这很好。从数学角度讲。

但是,这就是我想用它做的事情:

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

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

  

Q1 = 20E-6

当我运行print(Q1)show:20uC。

  

Q 2 = 20E-9

当我运行print(Q2)show:20nC。

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以尝试拆分字符串:

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

给出

['20', '-9']

从那时起,您可以在这些值之间插入任何内容:

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

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

答案 2 :(得分:0)

你做不到。您正在寻找的行为称为“猴子修补”。 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"

__str__

希望这会有所帮助

答案 3 :(得分:0)

我建议您使用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