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

FunkcjaIlu wybieraCzy powtórzenia są możliwe?zmienia oryginalny zestaw?
choice(seq)1 przedmiotnie
choices(seq, k=n)n elementówtak – ten sam element można powtórzyćnie
sample(seq, k=n)n elementównie – każdy jest innynie
shuffle(seq)wszystkie elementytak, 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
Otwórz praktykę →