Katakanlah saya membutuhkan angka 3 digit, jadi itu akan menjadi seperti ini:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
Untuk mendapatkan nomor 3 digit acak:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(anggap saja yang Anda maksud adalah tiga digit, bukan "hingga tiga digit".)
Untuk menggunakan jumlah digit yang berubah-ubah:
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)
Keluaran:
33
124
5127
Jika Anda menginginkannya sebagai string (misalnya, nomor telepon 10 digit) Anda dapat menggunakan ini:
sumber
Jika Anda memerlukan angka 3 digit dan ingin 001-099 menjadi angka yang valid, Anda masih harus menggunakan randrange / randint karena lebih cepat daripada alternatif. Cukup tambahkan angka nol sebelumnya yang diperlukan saat mengonversi menjadi string.
Alternatifnya, jika Anda tidak ingin menyimpan nomor acak sebagai int, Anda dapat melakukannya sebagai satu-satunya:
python 3.6+ hanya oneliner:
Contoh keluaran di atas adalah:
Diterapkan sebagai fungsi:
sumber
Apakah 0 dihitung sebagai kemungkinan digit pertama? Jika demikian, maka Anda membutuhkannya
random.randint(0,10**n-1)
. Jika tidakrandom.randint(10**(n-1),10**n-1)
,. Dan jika nol tidak pernah diizinkan, maka Anda harus secara eksplisit menolak angka dengan nol di dalamnya, atau menggambarn
random.randint(1,9)
angka.Selain: menarik bahwa
randint(a,b)
menggunakan "pengindeksan" agak non-pythonic untuk mendapatkan nomor acaka <= n <= b
. Orang mungkin berharap itu berfungsi sepertirange
, dan menghasilkan nomor acaka <= n < b
. (Perhatikan interval atas tertutup.)Mengingat tanggapan di komentar tentang
randrange
, perhatikan bahwa ini dapat diganti dengan pembersihrandom.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
danrandom.randrange(1,10)
.sumber
a <= n <= b
mengejutkan saya juga. Saya benci harus memasukkan ekstra itu ke-1
dalam kode saya. :-)randint
(ada di Lib / random.py) sebenarnya hanya memanggilrandrange(a, b+1)
!Anda bisa menulis sendiri sedikit fungsi untuk melakukan apa yang Anda inginkan:
Pada dasarnya,
10**(digits-1)
memberikan Anda {digit} digit angka terkecil, dan10**digits - 1
menghasilkan {digit} digit angka terbesar (yang merupakan {digit + 1} digit angka terkecil dikurangi 1!). Kemudian kami hanya mengambil bilangan bulat acak dari kisaran itu.sumber
Saya sangat menyukai jawaban RichieHindle, namun saya menyukai pertanyaan itu sebagai latihan. Berikut implementasi brute force menggunakan string :)
sumber
Dari dokumentasi resmi , bukankah metode sample () cocok untuk tujuan ini?
Keluaran:
sumber
Anda bisa membuat fungsi yang menggunakan daftar int, mengubah string menjadi concatenate dan cast do int lagi, seperti ini:
sumber