Ada dua cara yang jelas untuk menghasilkan angka acak dari 0 hingga 9 dengan Python. Seseorang dapat menghasilkan angka floating point acak antara 0 dan 1, kalikan dengan 10, dan bulatkan. Atau, seseorang dapat menggunakan random.randintmetode ini.
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Saya ingin tahu tentang apa yang akan terjadi jika seseorang menghasilkan angka acak antara 0 dan 1, dan menyimpan digit terakhir . Saya tidak selalu berharap distribusinya seragam, tetapi saya menemukan hasilnya cukup mengejutkan.
from random import random, seed
from collections import Counter
seed(0)
counts = Counter(int(str(random())[-1]) for _ in range(1_000_000))
print(counts)
Keluaran:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
Histogram ditunjukkan di bawah ini. Perhatikan bahwa 0 tidak muncul, karena trailing nol terpotong. Tetapi adakah yang bisa menjelaskan mengapa angka 4, 5, dan 6 lebih umum daripada yang lainnya? Saya menggunakan Python 3.6.10, tetapi hasilnya serupa di Python 3.8.0a4.
strmengubahnya menjadi basis-10 yang pasti akan menimbulkan masalah. misalnya 1-bit mengambang mantissa b0 -> 1.0dan b1 -> 1.5. "Digit terakhir" akan selalu 0atau 5.
random.randrange(10)bahkan lebih jelas, IMHO. random.randint(yang memanggil di random.randrangebawah tenda) adalah tambahan nanti untuk randommodul untuk orang yang tidak mengerti bagaimana rentang bekerja dengan Python. ;)
randrangesebenarnya berada di urutan kedua, setelah mereka memutuskan bahwa randintantarmuka adalah kesalahan.
