Logo Pixel Pixie

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.