Є два очевидних способи генерування випадкової цифри від 0 до 9 в Python. Можна створити випадкове число з плаваючою комою між 0 і 1, помножити на 10 і округлити вниз. Як варіант, можна скористатися random.randintметодом.
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Мені було цікаво, що станеться, якщо генерувати випадкове число між 0 і 1, і зберегти останню цифру. Я не обов'язково очікував, що розподіл буде рівномірним, але я вважав результат досить дивним.
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)
Вихід:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
Гістограма показана нижче. Зауважте, що 0 не відображається, оскільки обрізані нулі усічені. Але чи може хтось пояснити, чому цифри 4, 5 і 6 зустрічаються частіше, ніж решта? Я використовував Python 3.6.10, але результати були схожі в Python 3.8.0a4.
strперетворює його в базу-10, що може спричинити проблеми. наприклад, 1-бітна поплавкова мантія b0 -> 1.0і b1 -> 1.5. "Остання цифра" завжди буде 0або 5.
random.randrange(10)ще очевидніше, ІМХО. random.randint(який дзвінки random.randrangeпід капотом) було пізнішим доповненням до randomмодуля для людей, які не розуміють, як працюють діапазони в Python. ;)
randrangeнасправді прийшов другий, після того як вони вирішили, що randintінтерфейс був помилкою.
