我需要一个代码的帮助,最终的答案需要是6个字符,我问这个人一个号码,他们可以输入以下内容:
1, 10, 100, 1000, 10000
我需要的是最终的6个字符的数字,所以这是每个数字的答案
1 => 000001
10 => 000010
100 => 000100
1000 => 001000
10000 => 010000
所以我需要将长度设置为6位数,输入数字并添加" 0"到前面,直到它是6位数。
我该怎么做?
除此之外,如果有人输入200,我需要将其向下舍入到100,如果他们输入501,则向上舍入到1000;这也可以吗?
答案 0 :(得分:6)
好的,有两个部分:
首先,格式化数字:
"{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))
答案 1 :(得分:3)
zfill也可以帮到你
>>> str(10).zfill(6)
'000010'
答案 2 :(得分:0)
为了完整起见:
>>> for i in range(6):
... "%06d" % 10**i
将打印
'000001'
'000010'
'000100'
'001000'
'010000'
'100000'
答案 3 :(得分: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