Uwaga: są to liczby pseudolosowe i nie są one kryptograficznie bezpieczne. Nie używaj tego w żadnym przypadku, gdy nie chcesz, aby atakujący odgadł twoje liczby. Użyj secretsmodułu, aby uzyskać lepsze liczby losowe. Odniesienie: docs.python.org/3/library/random.html
465
import randomprint(random.randint(0,9))
random.randint(a, b)
Zwraca losową liczbę całkowitą N taką, że a <= N <= b.
W nowszych wersjach Pythona górna granica wydaje się być wyłączna (tzn. randint(0,9)Nigdy nie zwróci 9). Nie znajduje to odzwierciedlenia w dokumentacji online, ale we wbudowanej pomocy.
Yly
134
Spróbuj tego:
from random import randrange, uniform# randrange gives you an integral value
irand = randrange(0,10)# uniform gives you a floating-point value
frand = uniform(0,10)
Poprawiłoby to odpowiedź i powinno zostać dodane. Zawsze należy dodawać odpowiedzi bardziej nastawione na bezpieczeństwo, jeśli są dostępne.
SudoKid,
30
Wybierz rozmiar tablicy (w tym przykładzie wybrałem rozmiar 20). A następnie użyj następujących poleceń:
import numpy as np
np.random.randint(10, size=(1,20))
Możesz spodziewać się wyniku w następującej postaci ( przy każdym uruchomieniu zwracane będą różne losowe liczby całkowite; dlatego możesz oczekiwać, że liczby całkowite w tablicy wyjściowej będą się różnić od podanego poniżej przykładu ).
Warto również wiedzieć, w jaki sposób Numpy może wygenerować losową tablicę o określonym rozmiarze, a nie tylko pojedynczą liczbę losową. (Dokumenty: numpy.random.randint )
W przypadku liczb ciągłych randintlub randrangeprawdopodobnie najlepszym wyborem, ale jeśli masz kilka różnych wartości w sekwencji (tj. A list), możesz również użyć choice:
Jeśli powinny być one bez wymiany: random.sample. Z zamiennikiem możesz użyć choice[choice(values) for _ in range(3)]
wyrażenia
18
Chociaż wiele stanowisk wykazać jak dostać jedną losową liczbę całkowitą, oryginalne pytanie pyta jak wygenerować losową liczbę całkowitą s (liczba mnoga):
Jak mogę wygenerować losowe liczby całkowite od 0 do 9 (włącznie) w Pythonie?
Dla jasności tutaj pokazujemy, jak uzyskać wiele losowych liczb całkowitych.
Dany
>>>import random
lo =0
hi =10
size =5
Kod
Wiele losowych liczb całkowitych
# A>>>[lo + int(random.random()*(hi - lo))for _ in range(size)][5,6,1,3,0]
# B>>>[random.randint(lo, hi)for _ in range(size)][9,7,0,7,3]
# C>>>[random.randrange(lo, hi)for _ in range(size)][8,3,6,8,7]
# D>>> lst = list(range(lo, hi))>>> random.shuffle(lst)>>>[lst[i]for i in range(size)][6,8,2,5,1]
# E>>>[random.choice(range(lo, hi))for _ in range(size)][2,1,6,9,5]
1 Mianowicie @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, i in. 2 @prashanth wspomina o tym module pokazując jedną liczbę całkowitą. 3 Demonstrowane przez @Siddharth Satpathy
Tak. Dzięki za link. Chciałem jednak powiedzieć, że mogłeś poprawić swoją odpowiedź, podając szczegóły, zanim zacytujesz dwa wiersze kodu; na przykład z jakiego powodu ktoś wolałby go używać zamiast czegoś już wbudowanego. W każdym razie nie do tego jesteś zobowiązany.
Simón
9
>>>import random
>>> random.randrange(10)3>>> random.randrange(10)1
Aby uzyskać listę dziesięciu próbek:
>>>[random.randrange(10)for x in range(10)][9,0,4,0,5,7,4,3,6,8]
Ostrzeżenie: Pseudolosowych generatorów tego modułu nie należy używać ze względów bezpieczeństwa. Użyj os.urandom () lub SystemRandom, jeśli potrzebujesz kryptograficznie bezpiecznego generatora liczb pseudolosowych.
random.SystemRandom , który został wprowadzony w Pythonie 2.4, jest uważany za kryptograficznie bezpieczny . Jest nadal dostępny w Pythonie 3.7.1, który jest aktualny w momencie pisania.
Zamiast string.digits, rangemoże być użyty w przypadku niektórych innych odpowiedzi, być może wraz ze zrozumieniem. Mieszaj i dopasowuj według swoich potrzeb.
OpenTURNS pozwala nie tylko symulować losowe liczby całkowite, ale także definiować skojarzony rozkład ze UserDefinedzdefiniowaną klasą.
Poniżej symuluje 12 wyników dystrybucji.
import openturns as ot
points =[[i]for i in range(10)]
distribution = ot.UserDefined(points)# By default, with equal weights.for i in range(12):
x = distribution.getRealization()print(i,x)
Wystarczy dodać znaki, takie jak „ABCD” i „abcd” lub „^! ~ = -> <”, aby zmienić pulę znaków, z której można pobierać, zmienić zakres, aby zmienić liczbę generowanych znaków.
Odpowiedzi:
Próbować:
Więcej informacji: http://docs.python.org/library/random.html#random.randrange
źródło
secrets
modułu, aby uzyskać lepsze liczby losowe. Odniesienie: docs.python.org/3/library/random.htmlZwraca losową liczbę całkowitą N taką, że a <= N <= b.
Dokumenty: https://docs.python.org/3.1/library/random.html#random.randint
źródło
randint(0,9)
Nigdy nie zwróci 9). Nie znajduje to odzwierciedlenia w dokumentacji online, ale we wbudowanej pomocy.Spróbuj tego:
źródło
Generuje to 10 pseudolosowych liczb całkowitych z zakresu od 0 do 9 włącznie.
źródło
secrets
Moduł nowego w Pythonie 3.6. Jest to lepsze niżrandom
moduł do zastosowań w kryptografii lub zabezpieczeniach.Aby losowo wydrukować liczbę całkowitą z zakresu 0–9:
Aby uzyskać szczegółowe informacje, zobacz PEP 506 .
źródło
Wybierz rozmiar tablicy (w tym przykładzie wybrałem rozmiar 20). A następnie użyj następujących poleceń:
Możesz spodziewać się wyniku w następującej postaci ( przy każdym uruchomieniu zwracane będą różne losowe liczby całkowite; dlatego możesz oczekiwać, że liczby całkowite w tablicy wyjściowej będą się różnić od podanego poniżej przykładu ).
źródło
Wypróbuj to
random.shuffle
źródło
Spróbowałbym jednej z następujących czynności:
1.> numpy.random.randint
2.> numpy.random.uniform
3.> random.randrange
4.> random.randint
Prędkość:
► np.random.randint jest najszybszy , a następnie np.random.uniform i random.randrange . random.randint jest najwolniejszy .
► Zarówno np.random.randint, jak i np.random.uniform są znacznie szybsze (~ 8-12 razy szybciej) niż random.randrange i random.randint .
Uwagi:
źródło
W przypadku liczb ciągłych
randint
lubrandrange
prawdopodobnie najlepszym wyborem, ale jeśli masz kilka różnych wartości w sekwencji (tj. Alist
), możesz również użyćchoice
:choice
działa również dla jednego elementu z nieciągłej próbki:Jeśli potrzebujesz go „silnie kryptograficznie”, jest także
secrets.choice
w Pythonie 3.6 i nowszych:źródło
random.sample
. Z zamiennikiem możesz użyćchoice
[choice(values) for _ in range(3)]
Chociaż wiele stanowisk wykazać jak dostać jedną losową liczbę całkowitą, oryginalne pytanie pyta jak wygenerować losową liczbę całkowitą s (liczba mnoga):
Dla jasności tutaj pokazujemy, jak uzyskać wiele losowych liczb całkowitych.
Dany
Kod
Wiele losowych liczb całkowitych
Próbka losowych liczb całkowitych
Detale
Niektóre posty pokazują, jak natywnie generować wiele losowych liczb całkowitych. 1 Oto kilka opcji, które rozwiązują dorozumiane pytanie:
random.random
zwraca losową liczbę zmiennoprzecinkową w zakresie[0.0, 1.0)
random.randint
zwraca losową liczbę całkowitąN
taką, żea <= N <= b
random.randrange
alias dorandint(a, b+1)
random.shuffle
tasuje sekwencję w miejscurandom.choice
zwraca losowy element z niepustej sekwencjirandom.choices
zwracak
selekcje z populacji (z zastąpieniem, Python 3.6+)random.sample
zwracak
unikalne selekcje z populacji (bez zamiany): 2Zobacz także przemówienie R. Hettingera na temat dzielenia i aliasowania na przykładach z
random
modułu.Oto porównanie niektórych losowych funkcji w bibliotece standardowej i Numpy:
Możesz także szybko przekonwertować jedną z wielu dystrybucji w Numpy na próbkę losowych liczb całkowitych. 3)
Przykłady
1 Mianowicie @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, i in. 2 @prashanth wspomina o tym module pokazując jedną liczbę całkowitą. 3 Demonstrowane przez @Siddharth Satpathy
źródło
jeśli chcesz użyć numpy, użyj następujących poleceń:
źródło
Aby uzyskać listę dziesięciu próbek:
źródło
Generowanie losowych liczb całkowitych od 0 do 9.
Wynik:
źródło
random.sample
to kolejny, który można wykorzystaćźródło
Najlepszym sposobem jest użycie funkcji importowania losowego
lub bez importu biblioteki:
tutaj popitemy usuwają i zwracają dowolną wartość ze słownika
n
.źródło
Jest to bardziej podejście matematyczne, ale działa w 100% przypadków:
Powiedzmy, że chcesz użyć
random.random()
funkcji do wygenerowania liczby międzya
ab
. Aby to osiągnąć, wykonaj następujące czynności:num = (b-a)*random.random() + a;
Oczywiście możesz wygenerować więcej liczb.
źródło
Ze strony dokumentacji losowego modułu:
random.SystemRandom , który został wprowadzony w Pythonie 2.4, jest uważany za kryptograficznie bezpieczny . Jest nadal dostępny w Pythonie 3.7.1, który jest aktualny w momencie pisania.
Zamiast
string.digits
,range
może być użyty w przypadku niektórych innych odpowiedzi, być może wraz ze zrozumieniem. Mieszaj i dopasowuj według swoich potrzeb.źródło
OpenTURNS pozwala nie tylko symulować losowe liczby całkowite, ale także definiować skojarzony rozkład ze
UserDefined
zdefiniowaną klasą.Poniżej symuluje 12 wyników dystrybucji.
To drukuje:
Nawiasy są dostępne, ponieważ
x
sąPoint
w 1 wymiarze. Łatwiej byłoby wygenerować 12 wyników w jednym wezwaniu dogetSample
:wyprodukowałby:
Więcej szczegółów na ten temat znajduje się tutaj: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
źródło
Miałem z tym więcej szczęścia dla Pythona 3.6
Wystarczy dodać znaki, takie jak „ABCD” i „abcd” lub „^! ~ = -> <”, aby zmienić pulę znaków, z której można pobierać, zmienić zakres, aby zmienić liczbę generowanych znaków.
źródło