Es gibt zwei offensichtliche Möglichkeiten, in Python eine zufällige Ziffer von 0 bis 9 zu generieren. Man könnte eine zufällige Gleitkommazahl zwischen 0 und 1 erzeugen, mit 10 multiplizieren und abrunden. Alternativ könnte man die random.randint
Methode verwenden.
import random
def random_digit_1():
return int(10 * random.random())
def random_digit_2():
return random.randint(0, 9)
Ich war gespannt, was passieren würde, wenn man eine Zufallszahl zwischen 0 und 1 generiert und die letzte Ziffer behält . Ich hatte nicht unbedingt erwartet, dass die Verteilung einheitlich sein würde, aber ich fand das Ergebnis ziemlich überraschend.
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)
Ausgabe:
Counter({1: 84206,
5: 130245,
3: 119433,
6: 129835,
8: 101488,
2: 100861,
9: 84796,
4: 129088,
7: 120048})
Ein Histogramm ist unten gezeigt. Beachten Sie, dass 0 nicht angezeigt wird, da nachgestellte Nullen abgeschnitten werden. Aber kann jemand erklären, warum die Ziffern 4, 5 und 6 häufiger sind als die anderen? Ich habe Python 3.6.10 verwendet, aber die Ergebnisse in Python 3.8.0a4 waren ähnlich.
str
konvertiert es in Basis-10, was Probleme verursachen kann. zB eine 1-Bit-Float-Mantisse b0 -> 1.0
und b1 -> 1.5
. Die "letzte Ziffer" ist immer 0
oder 5
.
random.randrange(10)
ist noch offensichtlicher, IMHO. random.randint
(was random.randrange
unter der Haube aufgerufen wird) war eine spätere Ergänzung des random
Moduls für Leute, die nicht verstehen, wie Bereiche in Python funktionieren. ;)
randrange
kam tatsächlich an zweiter Stelle, nachdem sie entschieden hatten, dass die randint
Schnittstelle ein Fehler war.