0

我需要代码方面的帮助,最终答案需要是 6 个字符,我要求对方输入一个数字,他们可以输入以下内容:

 1, 10, 100, 1000, 10000

我需要的是最终数字是 6 个字符长,所以这是每个数字的答案

1     => 000001
10    => 000010
100   => 000100
1000  => 001000
10000 => 010000

所以我需要将长度设置为6位,输入数字并在前面添加“0”直到它是6位。

我怎样才能做到这一点?

除此之外,如果有人输入 200,我需要将其四舍五入为 100,如果他们输入 501,则四舍五入为 1000;这也可以吗?

4

4 回答 4

7

好的,分两部分:

首先,格式化一个数字:

"{number:06}".format(number=100)

会给你'000100'。但在此之前,我们必须四舍五入。

编辑:这个解决方案更加优雅:

import math
def rep(number):
    rounded = 10**(math.floor(math.log(number,10)-math.log(0.5,10)))
    return "{number:06}".format(number=int(rounded))

让我们来看看:

>>> print rep(100)
000100
>>> print rep(1000)
001000
>>> print rep(501)
001000
>>> print rep(499)
000100
>>> print rep(500)
000100

旧版本供将来参考结束教育乐趣

(它仍然更快,因为它不涉及任何log操作)

这是一个巧妙的小技巧:round(501)将四舍五入到第一个十进制数字,但round(501, -1)会四舍五入到10^1数字(所以结果是500.0),round(501, -2)10^2(结果仍然是500.0),并且round(501, -3)会四舍五入到 1000。

所以我们希望 500 向上舍入为 1000,但 53 向上舍入为 100。好吧,我们是这样做的:

number = 521
rounded = round(number, -len(str(number)))

因此,由于描述字符串number的长度为三个字符,因此我们四舍五入为 -3。

然而,这完美地四舍五入,但如果我们向下四舍五入,它总是向下舍入为 0。让我们抓住这种情况:

def rep(number):
    rounded = round(number, -len(str(number)))
    if not rounded: # 0 evaluates to False
        rounded = 10**(len(str(number))-1)
    return "{number:06}".format(number=int(rounded))
于 2012-05-10T12:01:44.553 回答
4

zfill也可以帮助你

>>> str(10).zfill(6)
'000010'
于 2012-05-10T12:02:13.970 回答
0

为了完整起见:

>>> for i in range(6):
...   "%06d" % 10**i

将打印

'000001'
'000010'
'000100'
'001000'
'010000'
'100000'
于 2012-05-10T12:06:03.670 回答
0
>>> print "%06d" % 1
000001
>>> print "%06d" % 10
000010
>>> print "%06d" % 100
000100
>>> print "%06d" % 1000
001000
>>> print "%06d" % 10000
010000
>>> print "%06d" % 100000
100000

5.6.2. 字符串格式化操作

于 2012-05-10T12:07:45.657 回答