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.randintMethode 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.
strkonvertiert es in Basis-10, was Probleme verursachen kann. zB eine 1-Bit-Float-Mantisse b0 -> 1.0und b1 -> 1.5. Die "letzte Ziffer" ist immer 0oder 5.
random.randrange(10)ist noch offensichtlicher, IMHO. random.randint(was random.randrangeunter der Haube aufgerufen wird) war eine spätere Ergänzung des randomModuls für Leute, die nicht verstehen, wie Bereiche in Python funktionieren. ;)
randrangekam tatsächlich an zweiter Stelle, nachdem sie entschieden hatten, dass die randintSchnittstelle ein Fehler war.
