Disons que j'ai besoin d'un numéro à 3 chiffres, donc ce serait quelque chose comme:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
Pour obtenir un nombre aléatoire à 3 chiffres:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(en supposant que vous vouliez vraiment dire trois chiffres, plutôt que "jusqu'à trois chiffres".)
Pour utiliser un nombre arbitraire de chiffres:
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)
Production:
33
124
5127
Si vous le souhaitez sous forme de chaîne (par exemple, un numéro de téléphone à 10 chiffres), vous pouvez utiliser ceci:
la source
Si vous avez besoin d'un nombre à 3 chiffres et que vous voulez que 001-099 soit un nombre valide, vous devez toujours utiliser randrange / randint car il est plus rapide que les alternatives. Ajoutez simplement les zéros précédents nécessaires lors de la conversion en chaîne.
Alternativement, si vous ne voulez pas enregistrer le nombre aléatoire en tant qu'int, vous pouvez simplement le faire comme un oneliner:
python 3.6+ uniquement oneliner:
Voici des exemples de résultats de ce qui précède:
Implémenté en fonction:
la source
Le 0 compte-t-il comme premier chiffre possible? Si tel est le cas, vous en avez besoin
random.randint(0,10**n-1)
. Dans le cas contraire,random.randint(10**(n-1),10**n-1)
. Et si zéro n'est jamais autorisé, vous devrez rejeter explicitement les nombres contenant un zéro ou dessiner desn
random.randint(1,9)
nombres.A part: il est intéressant d'
randint(a,b)
utiliser une "indexation" quelque peu non pythonique pour obtenir un nombre aléatoirea <= n <= b
. On aurait pu s'attendre à ce que cela fonctionne commerange
, et produise un nombre aléatoirea <= n < b
. (Notez l'intervalle supérieur fermé.)Compte tenu des réponses dans les commentaires sur
randrange
, notez que ceux-ci peuvent être remplacés par le nettoyantrandom.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
etrandom.randrange(1,10)
.la source
a <= n <= b
m'a surpris aussi. Je n'aime pas avoir à mettre ce supplément-1
dans mon code. :-)randint
(il est dans Lib / random.py) n'appelle en fait querandrange(a, b+1)
!Vous pourriez vous écrire une petite fonction pour faire ce que vous voulez:
Fondamentalement,
10**(digits-1)
vous donne le plus petit nombre à {chiffre} -digit, et10**digits - 1
vous donne le plus grand nombre à {digit} -digit (qui se trouve être le plus petit nombre à {chiffre + 1} -digit moins 1!). Ensuite, nous prenons simplement un entier aléatoire dans cette plage.la source
J'ai beaucoup aimé la réponse de RichieHindle, mais j'ai aimé la question en tant qu'exercice. Voici une implémentation de force brute utilisant des chaînes :)
la source
D'après la documentation officielle , ne semble-t-il pas que la méthode sample () soit appropriée à cet effet?
Production:
la source
Vous pouvez créer une fonction qui consomme une liste de int, se transforme en chaîne pour concaténer et lancer à nouveau do int, quelque chose comme ceci:
la source