Nehmen wir an, ich brauche eine dreistellige Nummer, also wäre es ungefähr so:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
So erhalten Sie eine dreistellige Zufallszahl:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(Angenommen, Sie haben wirklich drei Ziffern gemeint und nicht "bis zu drei Ziffern".)
So verwenden Sie eine beliebige Anzahl von Ziffern:
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)
Ausgabe:
33
124
5127
Wenn Sie es als Zeichenfolge möchten (z. B. eine 10-stellige Telefonnummer), können Sie Folgendes verwenden:
quelle
Wenn Sie eine dreistellige Nummer benötigen und 001-099 gültige Nummern sein möchten, sollten Sie dennoch Randrange / Randint verwenden, da dies schneller als Alternativen ist. Fügen Sie einfach die erforderlichen vorhergehenden Nullen hinzu, wenn Sie in eine Zeichenfolge konvertieren.
Wenn Sie die Zufallszahl nicht als int speichern möchten, können Sie dies auch einfach als Oneliner tun:
Python 3.6+ nur Oneliner:
Beispielausgaben der oben genannten sind:
Als Funktion implementiert:
quelle
Zählt 0 als mögliche erste Ziffer? Wenn ja, dann brauchen Sie
random.randint(0,10**n-1)
. Wenn nicht ,random.randint(10**(n-1),10**n-1)
. Und wenn Null niemals erlaubt ist, müssen Sie Zahlen mit einer Null explizit ablehnen odern
random.randint(1,9)
Zahlen zeichnen .Nebenbei: Es ist interessant, dass
randint(a,b)
eine nicht-pythonische "Indizierung" verwendet wird, um eine Zufallszahl zu erhaltena <= n <= b
. Man hätte erwarten können, dass es so funktioniertrange
und eine Zufallszahl erzeugta <= n < b
. (Beachten Sie das geschlossene obere Intervall.)randrange
Beachten Sie angesichts der Antworten in den Kommentaren zu , dass diese durch den Reiniger ersetzt werden könnenrandom.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
undrandom.randrange(1,10)
.quelle
a <= n <= b
mich auch überrascht. Ich lehne es ab, dieses Extra-1
in meinen Code einfügen zu müssen. :-)randint
(es ist in Lib / random.py) eigentlich nur aufrandrange(a, b+1)
!Sie könnten sich eine kleine Funktion schreiben, um zu tun, was Sie wollen:
Grundsätzlich erhalten
10**(digits-1)
Sie die kleinste {stellige} -stellige Zahl und10**digits - 1
die größte {stellige} -stellige Zahl (die zufällig die kleinste {Stelle + 1} -stellige Zahl minus 1 ist!). Dann nehmen wir einfach eine zufällige ganze Zahl aus diesem Bereich.quelle
Die Antwort von RichieHindle hat mir sehr gut gefallen, aber mir hat die Frage als Übung gefallen. Hier ist eine Brute-Force-Implementierung mit Strings :)
quelle
Scheint die sample () -Methode aus der offiziellen Dokumentation nicht für diesen Zweck geeignet zu sein?
Ausgabe:
quelle
Sie können eine Funktion erstellen, die eine Liste von int verwendet, in eine Zeichenfolge umwandelt, um do int zu verketten, und do int erneut umwandelt.
quelle