回答:
ランダムな3桁の番号を取得するには:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(「3桁まで」ではなく、実際に3桁を意味すると仮定します。)
任意の桁数を使用するには:
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
出力:
33
124
5127
文字列(たとえば、10桁の電話番号)として使用する場合は、次のように使用できます。
n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])
3桁の数値が必要で、001-099を有効な数値にしたい場合は、他の方法よりも速いrandrange / randintを使用する必要があります。文字列に変換するときに、必要な先行ゼロを追加するだけです。
import random
num = random.randrange(1, 10**3)
# using format
num_with_zeros = '{:03}'.format(num)
# using string's zfill
num_with_zeros = str(num).zfill(3)
あるいは、乱数をintとして保存したくない場合は、ワンライナーとしてそれを行うことができます:
'{:03}'.format(random.randrange(1, 10**3))
python 3.6+ワンライナーのみ:
f'{random.randrange(1, 10**3):03}'
上記の出力例は次のとおりです。
関数として実装:
import random
def n_len_rand(len_, floor=1):
top = 10**len_
if floor > top:
raise ValueError(f"Floor {floor} must be less than requested top {top}")
return f'{random.randrange(floor, top):0{len_}}'
0は可能な最初の数字としてカウントされますか?もしそうなら、あなたは必要random.randint(0,10**n-1)
です。、そうでない場合random.randint(10**(n-1),10**n-1)
。また、ゼロが許可されない場合は、ゼロが含まれている数値を明示的に拒否するか、数値を描画n
random.randint(1,9)
する必要があります。
余談ですが、randint(a,b)
Pythonではない「インデックス作成」を使用して乱数を取得するのは興味深いことa <= n <= b
です。のようrange
に機能し、乱数を生成することを期待していたかもしれませんa <= n < b
。(閉じた上の間隔に注意してください。)
コメントで回答を考えるとrandrange
、これらはクリーナーと交換することができることに注意してください、random.randrange(0,10**n)
、random.randrange(10**(n-1),10**n)
とrandom.randrange(1,10)
。
a <= n <= b
私も驚いた。私はそれを-1
コードに追加する必要があることに憤慨しています。:-)
randint
ことに、(Lib / random.pyにある)のPythonコードは実際にはrandrange(a, b+1)
!