Rozdział 5 · Pobawmy się liczbami!
choice, choices, sample, shuffle
Cztery podobne narzędzia do losowania różnią się liczbą wybranych przedmiotów i możliwością ich powtórzenia.
Poza okazjonalnymi liczby, random wie, jak wybierać losowo
of gotowy zestaw wartości — lista opcji, talia kart, lista imion.
Cztery podobne, ale różne narzędzia
| Funkcja | Ilu wybiera | Czy powtórzenia są możliwe? | zmienia oryginalny zestaw? |
|---|---|---|---|
choice(seq) | 1 przedmiot | — | nie |
choices(seq, k=n) | n elementów | tak – ten sam element można powtórzyć | nie |
sample(seq, k=n) | n elementów | nie – każdy jest inny | nie |
shuffle(seq) | wszystkie elementy | — | tak, miesza na miejscu |
choice() jest jednym elementem losowym
choice.py
import random
varianty = [„kamień”, „nożyczki”, „papier”]
print(random.choice(varianty))
choices() — kilka, z możliwymi powtórzeniami
Wyobraźmy sobie ruletkę z nagrodami – ta sama nagroda może wypaść ponownie:
choices.py
import random
prizy = ["🎁", "🎈", "🎉"]
vypavshie = random.choices(prizy, k=5)
print(vypavshie) # na przykład, ["🎈", "🎈", "🎁", "🎉", "🎈"] — powtórzenia są dozwolone
choices() mają opcjonalne obciążniki
random.choices(prizy, weights=[1, 1, 10], k=5) sprawią, że trzecia nagroda jest dziesięć razy bardziej prawdopodobna niż pozostałe, co jest przydatne przy „nieuczciwych”sample() — kilka, bez powtórzeń
Wyobraźmy sobie losowanie nagród między uczestnikami – ten sam uczestnik nie może wygrać Dwa razy w tym samym losowaniu:
sample.py
import random
uchastniki = [„Ania”, „Borys”, „Faith”, „Gleb”, „Dane”]
pobediteli = random.sample(uchastniki, k=2)
print(pobediteli) # na przykład, ["Vera", "Anya"] są różne
k nie może być dłuższy niż długość zbioru
random.sample(uchastniki, k=10) z 5 uczestnikami powoduje ValueError — bez powtórzeń nie można wybrać więcej elementów niż jest w zestawie. U choices() nie ma takiego ograniczenia, ponieważ powtórzenia są dozwolone.shuffle() to mieszać wszystko na bieżąco
W przeciwieństwie do trzech powyższych funkcji, shuffle() nie wybiera
Pod zbiór – to się porusza wszystkim lista i nic nie zwraca
(None), ponieważ zmienia lista bezpośrednio „na miejscu”:
shuffle.py
import random
koloda = [1, 2, 3, 4, 5]
random.shuffle(koloda)
print(koloda) # na przykład, [3, 1, 5, 2, 4] to ten sam lista, nowy porządek
shuffle() zwraca None – nie przypisuj wyniku ponownie
koloda = random.shuffle(koloda) — częsty błąd: po niej koloda stanie się None, chociaż mieszanie już się powiodło PRZED przypisaniem. Po prostu wywołaj random.shuffle(koloda) oddzielnym wierszem.Praktyka: choice, choices, sample, shuffle
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji