Przygoda z losowością: Gry, karty tarota i generator numerów PESEL z użyciem biblioteki random w Pythonie
30 października 2023

Biblioteka random
w Pythonie: Tworzenie losowych elementów
Python to język programowania, który znakomicie radzi sobie z różnymi aspektami programowania. Jednym z tych aspektów jest generowanie losowych liczb i danych. Do tego celu możemy wykorzystać bibliotekę random
, która jest wbudowanym narzędziem w Pythonie. W tym artykule przyjrzymy się bliżej tej bibliotece i dowiemy się, jak można z jej pomocą tworzyć losowe elementy w swoim kodzie.
Importowanie biblioteki random
Aby zacząć korzystać z biblioteki random
, musimy ją zaimportować do naszego programu. Oto jak to zrobić:
import random
Teraz mamy dostęp do wszystkich funkcji i metod oferowanych przez tę bibliotekę.
Generowanie losowych liczb całkowitych
Jednym z najczęstszych zastosowań biblioteki random
jest generowanie losowych liczb całkowitych. Oto kilka przykładów:
1. Losowa liczba całkowita w zakresie
Jeśli chcemy wygenerować losową liczbę całkowitą w określonym zakresie, możemy skorzystać z funkcji randint
:
losowa_liczba = random.randint(1, 100)
print(losowa_liczba)
W powyższym przykładzie zostanie wygenerowana losowa liczba całkowita z zakresu od 1 do 100. Należy mieć na uwadze, że jest to zakres zamknięty, więc zarówno 1, jak i 100 wchodzą w skład potencjalnie wygenerowanych liczb.
2. Losowa liczba całkowita z krokiem
Jeśli chcemy generować losowe liczby całkowite z określonym krokiem, możemy użyć funkcji randrange
:
losowa_liczba = random.randrange(0, 100, 5)
print(losowa_liczba)
W tym przypadku zostanie wygenerowana liczba całkowita z zakresu od 0 do 100 z krokiem 5. Warto zaznaczyć, że jest to zakres otwarty z prawej strony, więc liczba 100 nie wchodzi w jego skład.
Generowanie losowych liczb zmiennoprzecinkowych
Biblioteka random
umożliwia także generowanie losowych liczb zmiennoprzecinkowych. Oto przykład:
losowa_liczba = random.uniform(1.0, 10.0)
print(losowa_liczba)
Funkcja uniform
generuje losową liczbę zmiennoprzecinkową z zamkniętego zakresu od 1.0 do 10.0.
Tasowanie elementów listy
Jeśli masz listę i chcesz ją przetasować, aby elementy były w losowej kolejności, biblioteka random
również może Ci w tym pomóc:
moja_lista = [1, 2, 3, 4, 5]
random.shuffle(moja_lista)
print(moja_lista)
Funkcja shuffle
przetasuje elementy listy i poustawia je w losowej kolejności.
Przykładowe zastosowania
Biblioteka random
w Pythonie znajduje zastosowanie nie tylko w tworzeniu prostych narzędzi, ale również w bardziej zaawansowanych aplikacjach. Poniżej przedstawiam wam trzy ciekawe zastosowania tej biblioteki:
Gra: Bibliotekę Radnom można wykorzystać do tworzenie losowych sytuacji, które przydają się w grach, takich jak kółko i krzyżyk czy gra w papier, kamień, nożyce. I tę drugą grę przedstawię wam jak można napisać w Python:
import random
def gra_kamien_papier_nozyce():
wybory = ["kamień", "papier", "nożyce"]
while True:
komputer = random.choice(wybory)
gracz = input("Wybierz kamień, papier lub nożyce (q aby wyjsc): ").lower()
if gracz == 'q':
break
if gracz not in wybory:
print("Niepoprawny wybór. Wybierz kamień, papier lub nożyce.")
continue
print(f"Komputer wybrał: {komputer}")
print(f"Ty wybrałeś: {gracz}")
if gracz == komputer:
print("Remis!")
elif (gracz == "kamień" and komputer == "nożyce") or (gracz == "papier" and komputer == "kamień") or (gracz == "nożyce" and komputer == "papier"):
print("Wygrales!")
else:
print("Komputer wygrał!")
if __name__ == "__main__":
gra_kamien_papier_nozyce()
Wróżbiarstwo: Bibliotekę random
możemy wykorzystać również do generowania losowych kart. Za oknem aura jesienna, w sam raz na zabawy andrzejkowe. Dlatego w tym przypadku pokażę wam, jak można wykorzystać bibliotekę random
do symulacji procesów wróżebnych na przykładzie losowania kart Tarota.
import random
def losuj_karte_tarota():
rodzaje_wielkie = ["Głupiec", "Mag", "Kapłanka", "Cesarzowa", "Cesarz", "Arcykapłan", "Kochankowie", "Rydwan", "Sprawiedliwość", "Pustelnik", "Koło Fortuny", "Siła", "Wisielec", "Śmierć", "Umiarkowanie", "Diabeł", "Wieża", "Gwiazda", "Księżyc", "Słońce", "Sąd", "Świat"]
rodzaje_mniejsze = ["Buławy", "Miecze", "Kielichy", "Denary"]
liczby_i_figury = ["As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Giermek", "Rycerz", "Królowa", "Król"]
liczba_kart = len(rodzaje_wielkie) + (len(rodzaje_mniejsze) * len(liczby_i_figury))
karta = random.randrange(0, liczba_kart)
if karta <= len(rodzaje_wielkie):
wylosowana_karta = rodzaje_wielkie[karta]
return f'{wylosowana_karta} (Arkana Wielkie)'
else:
losowy_rodzaj_mniejszy = random.choice(rodzaje_mniejsze)
losowa_karta = random.choice(liczby_i_figury)
return f"{losowa_karta} {losowy_rodzaj_mniejszy} (Arkana Mniejsze)"
if __name__ == "__main__":
print("Zadaj pytanie i wylosuj kartę Tarota, która odpowie na Twoje pytanie.")
while True:
input("Naciśnij Enter, aby losować kartę Tarota...")
karta = losuj_karte_tarota()
print(f"Twoja wylosowana karta Tarota to: {karta}")
ponownie = input("Czy chcesz zadać kolejne pytanie? (Tak/Nie): ").strip().lower()
if ponownie != "tak":
break
Generowanie numeru PESEL: Choć PESEL to bardziej złożony proces, możemy wykorzystać random
do generowania losowych cyfr, które mogą reprezentować numer PESEL w celach testowych lub symulacyjnych. W poniższym przykładzie losujemy numer PESEL w trochę uproszczonej wersji, czyli ograniczamy rok od 1900 do 1999 oraz przyjmujemy, że każdy miesiąc ma 28 dni.
# Ograniczenia - dzien do 28 dnia oraz przedzial roku 1900-1999
from random import randint
def random_pesel():
year = randint(0, 99)
month = randint(1, 12)
day = randint(1, 28)
sequence = randint(0, 9999)
num = f'{year:02}{month:02}{day:02}{sequence:04}'
def calculate_checksum(number):
factors = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]
sum = 0
for i in range(0, len(number)):
sum += (int(number[i]) * factors[i]) % 10
return 10 - (sum % 10)
checksum = calculate_checksum(num)
return f'{num}{checksum}'
print(random_pesel())
Jak widzicie, biblioteka random
w Pythonie jest nieocenionym narzędziem do generowania losowych danych w swoim kodzie. Dzięki jej funkcjom można łatwo tworzyć losowe liczby całkowite, liczby zmiennoprzecinkowe i wiele innych. Jest to przydatne w wielu aplikacjach, takich jak gry, symulacje, testowanie, czy analiza danych. Jeśli potrzebujesz losowości w swoim kodzie, biblioteka random
jest doskonałym wyborem.