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

さて、2 つの部分:

まず、数値をフォーマットします。

"{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)最初の 10 進数の桁に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 文字の長さなので、-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 に答える