Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Praca z modułem random

W języku Python przewidziano moduł random generujący liczby pseudolosowe. Rozpoczynając pracę z nim, podobnie jak w przypadku innych modułów, musimy rozpocząć od importu całego modułu lub funkcji, których chcemy użyć. Zacznijmy od omówienia prostego przykładu:

Linia 1. import random kratka Import modułu random. Linia 3. random kropka seed otwórz nawias okrągły 123 zamknij nawias okrągły kratka Ustaw ziarno na 123. Linia 4. random kropka random otwórz nawias okrągły zamknij nawias okrągły kratka Wygeneruj liczbę.

Pierwszą czynnością, którą wykonaliśmy, jest ustawienie ziarnaziarnoziarna na stałą wartość 123, używając funkcji seed() z modułu random. Następnie wygenerowaliśmy losową liczbę za pomocą metody random(). Bez względu na to, ile razy uruchomimy program, zawsze otrzymamy tę samą liczbę. Jeżeli pozbędziemy się ziarna i pozostawimy domyślne, ustawiane na podstawie czasu systemowego, wynik będzie za każdym razem inny. Łatwo jednak zauważyć, że nawet z domyślnym ziarnem zawsze otrzymujemy liczbę rzeczywistą bliską zeru. To dlatego, że funkcja random() zwraca wartość z przedziału:

0n<1

Oczywiście czasami będziemy potrzebować liczb z innego zakresu. Dla większości przypadków wystarczą nam funkcje dostępne w module random. Zatem gdybyśmy chcieli wylosować liczbę z następującego zakresu:

30n<70

możemy wykorzystać metodę uniform(). Funkcja ta przyjmuje dwa parametry: pierwszy określa początek, a drugi koniec zakresu, z którego losowane będą liczby rzeczywiste.

Linia 1. import random kratka Import modułu random. Linia 3. random kropka uniform otwórz nawias okrągły 30 kropka 0 przecinek 70 kropka 0 zamknij nawias okrągły kratka Wygeneruj liczbę.
Ważne!

Funkcja uniform() może zawierać w sobie górny zakres (w tym wypadku 70), w zależności od wyniku zaokrąglenia następującego równania:

a+(ba)r

gdzie:
a – początek poszukiwanego zakresu,
b – koniec poszukiwanego zakresu,
r – liczba wygenerowana przez funkcję random().

Gdybyśmy jednak chcieli wylosować liczbę całkowitą, możemy wykorzystać funkcję randrange(). Metoda ta może być wywołana na trzy różne sposoby:

  • z pojedynczym parametrem oznaczającym koniec przedziału, z wyłączeniem podanej wartości, tak jak w przypadku poprzednich funkcji;

  • z dwoma parametrami oznaczającymi początek i koniec przedziału, ponownie z przedziałem niedomkniętym z prawej strony;

  • z trzema parametrami, gdzie pierwsze dwa oznaczają początek i koniec przedziału, a trzeci – skok pomiędzy nimi; tu również przedział nie jest domknięty.

Poniższy kod wygeneruje nam zatem najpierw liczbę całkowitą z zakresu:

0n<10

Następnie wygenerujemy liczbę z przedziału:

20n80

A na koniec wylosujemy parzystą liczbę całkowitą z powyższego zakresu

Linia 1. import random kratka Import modułu random. Linia 3. kratka Generowanie liczb całkowitych dwukropek. Linia 4. random kropka randrange otwórz nawias okrągły 10 zamknij nawias okrągły kratka Od 0 do 9 włącznie. Linia 5. random kropka randrange otwórz nawias okrągły 20 przecinek 81 zamknij nawias okrągły kratka Od 20 do 80 włącznie. Linia 6. random kropka randrange otwórz nawias okrągły 20 przecinek 81 przecinek 2 zamknij nawias okrągły kratka Parzystych przecinek od 20 do 80 włącznie.

Symulacje

Oprócz generowania liczb przy użyciu modułu random możemy również dokonywać innych operacji. Jedną z nich jest mieszanie elementów w zbiorze takim jak na przykład tablica. Służy do tego metoda shuffle() przyjmująca tylko jeden argument, którym jest ten zbiór.

Linia 1. import random kratka Import modułu random. Linia 3. cards znak równości otwórz nawias kwadratowy apostrof A apostrof przecinek apostrof K apostrof przecinek apostrof Q apostrof przecinek apostrof J apostrof przecinek apostrof 10 apostrof zamknij nawias kwadratowy. Linia 4. random kropka shuffle otwórz nawias okrągły cards zamknij nawias okrągły kratka Przetasuj zbiór kart.

Kolejną wartą uwagi funkcją jest choice(), która wybierze pojedynczy element ze zbioru. Podobnie jak shuffle(), metoda choice() przyjmuje tylko jeden argument.

Linia 1. import random kratka Import modułu random. Linia 3. cards znak równości otwórz nawias kwadratowy apostrof A apostrof przecinek apostrof K apostrof przecinek apostrof Q apostrof przecinek apostrof J apostrof przecinek apostrof 10 apostrof zamknij nawias kwadratowy. Linia 4. random kropka choice otwórz nawias okrągły cards zamknij nawias okrągły kratka Wybierz losową kartę.

Do wylosowania n elementów bez powtórzeń służy metoda sample(). Przyjmuje ona dwa argumenty – zbiór oraz liczbę elementów do wylosowania.

Linia 1. import random kratka Import modułu random. Linia 3. cards znak równości otwórz nawias kwadratowy apostrof A apostrof przecinek apostrof K apostrof przecinek apostrof Q apostrof przecinek apostrof J apostrof przecinek apostrof 10 apostrof zamknij nawias kwadratowy. Linia 4. random kropka sample otwórz nawias okrągły cards przecinek 3 zamknij nawias okrągły kratka Wybierz trzy losowe karty przecinek.

Ostatnią omawianą funkcją jest choices(). Metoda ta wybierze zadaną liczbę elementów ze zbioru, z powtórzeniami. Przyjmuje trzy argumenty: pierwszym z nich jest zbiór elementów, drugi argument zawiera zbiór wag poszczególnych elementów, ostatni parametr to liczba losowanych elementów.

Linia 1. import random kratka Import modułu random. Linia 3. cards znak równości otwórz nawias kwadratowy apostrof A apostrof przecinek apostrof K apostrof przecinek apostrof Q apostrof przecinek apostrof J apostrof przecinek apostrof 10 apostrof zamknij nawias kwadratowy. Linia 4. chance znak równości otwórz nawias kwadratowy 2 przecinek 3 przecinek 4 przecinek 4 przecinek 4 zamknij nawias kwadratowy. Linia 6. kratka Wybierz osiem kart przecinek z powtórzeniami kropka. Linia 7. kratka Niestety zgubiliśmy dwa asy i jednego króla przecinek. Linia 8. kratka więc one mają mniejszą szansę żeby zostać wylosowane. Linia 9. random kropka choices otwórz nawias okrągły cards przecinek chance przecinek 8 zamknij nawias okrągły.
Ważne!

Metoda choices() została dodana dopiero w Pythonie 3.6, więc jeśli używasz starszej wersji, nie możesz się nią posłużyć.

Słownik

inicjalizacja
inicjalizacja

w programowaniu: nadanie wartości początkowych

ziarno
ziarno

(ang. seed) wartość inicjująca generator liczb pseudolosowych