Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Moduły matematyczne
Moduł losowy
Cel
Uruchom symulacje i testy, aby przygotować się na ewentualne błędy i opóźnienia podczas budowy gospodarstwa, wykorzystując moduł random.
Przechodząc przez annex znajduje się biuro, które zajmuje się obowiązkami administracyjnymi, obsługując papierkową robotę dotyczącą wysyłki, zakwaterowania i logistyki związanej z budową. Rozsądnym pomysłem byłoby przeprowadzenie kilku scenariuszy, używając dostępnych danych do obliczenia opóźnień i awarii sprzętu. Aby w tym pomóc, mamy moduł random, aktywowany przez import random.
Moduł ten służy do generowania losowych wyników w różnych stopniach, umożliwiając przeprowadzanie symulacji lub dodawanie losowych elementów do Twoich obliczeń/ćwiczeń. W naszym przypadku będziemy korzystać z następujących funkcji:
random.seed(): Ustawia ziarno dla generacji liczb losowych, przyjmuje jeden argument będący numerem ziarna, którego chcesz użyć. Oznacza to, że każda funkcja losowa użyta z danym ziarnem zwróci te same wyniki przy kolejnych użyciach. Służy do kontrolowania generacji losowej i umożliwia odtworzenie określonych wyników.random.random(): Zwraca losową liczbę zmiennoprzecinkową między0a1.random.randint(): Przyjmuje dwa argumenty i generuje liczbę między nimi, włącznie z samymi liczbami. Wynik jest zwracany jako liczba całkowita.random.uniform(): Działa jak poprzednia funkcja, ale zwraca losową liczbę zmiennoprzecinkową zamiast liczby całkowitej.random.triangular(): Podobna do poprzedniej funkcji, ale posiada dodatkowy argument modyfikatora zwany mode. Wartość mode musi być liczbą pomiędzy dwoma liczbami w przedziale losowym. Wygenerowana liczba będzie statystycznie bliższa trybowi niż czysto losowej liczbie pomiędzy pierwszymi dwoma argumentami.random.choice(): Przyjmuje listę jako argument i losowo wybiera jeden element z tej listy.random.choices(): Generuje losową listę pobraną z innej listy, przyjmuje trzy argumenty: listę, z której chcesz pobierać próbki, inną listę określającą wagę pobierania dla każdego elementu oraz zmienną k, której wartość określa, ile próbek chcesz pobrać. Liczba próbek może być większa niż ilość elementów na liście, gdyż może generować duplikaty na podstawie przypisanych wag.random.shuffle(): Przyjmuje listę jako argument i losowo ją miesza.random.sample(): Przyjmuje dwa argumenty: listę, z której pobiera próbkę, oraz liczbę próbek, które chcesz pobrać. Jest to uproszczona wersja funkcjirandom.choices().
Aby rozpocząć, udaj się do lekkiego znaku X i staw czoło biurku, użyj funkcji read(), aby przeczytać notatkę i zidentyfikować punkty danych potrzebne do przeprowadzenia symulacji z pewną losową zmiennością. Przeprowadzimy symulację awarii sprzętu; notatka poinformuje Cię, jakie seed użyć do generacji losowej oraz z której listy pobierać próbki. Użyj funkcji random.seed() i wprowadź wartość podaną w notatce.
Udaj się do ciemnego znaku X na niebieskim dywanie i staw czoło biurku. Mamy stałą listę o nazwie sectors, która zawiera obszary gospodarstwa określone w poprzedniej notatce. Utwórz zmienną o nazwie selection, aby przechować wartość zwróconą przez random.choice(), używając stałej listy sectors do pobrania próbki z listy, na przykład: selection = random.choice(sectors). Utwórz kolejną zmienną o nazwie delay i przypisz jej wartość zwróconą przez random.random(), aby zasymulować margines błędów spowodowanych opóźnieniami.
Utwórz jeszcze jedną zmienną o nazwie defect i przypisz jej wartość zwróconą przez random.randint(), aby wygenerować procentową szansę potencjalnej awarii sprzętu. Dodaj jako argumenty 0 i 15, aby wygenerować procent między tymi dwiema liczbami. Gdy zmienne selection, delay i defect zostaną ustawione, użyj wcześniej przygotowanej funkcji write() z tymi trzema zmiennymi w tej kolejności, aby zapisać punkty danych, które mogą posłużyć do testowania potencjalnych problemów podczas budowy.
Udaj się do złotego znaku X i użyj funkcji read(), aby kontynuować projekcje; dane w notatce będą zawierały materiały, ilości oraz dane dotyczące pobierania próbek. Przeprowadzimy większą symulację, wykorzystując dane z notatki, w tym stałą listę o nazwie materials, która przechowuje rodzaje materiałów określone w notatce.
Udaj się do ciemnego znaku X na czerwonym dywanie i staw czoło biurku. Utwórz listę o nazwie weights i przypisz jej cztery (4) wartości liczbowe podane w notatce, odpowiadające materiałom w kolejności, w jakiej zostały przedstawione. Na przykład: weights = [400, 600 , -insert value-, -insert value-]
Utwórz zmienną o nazwie simulation i przypisz jej wartość zwróconą przez random.choices(). Dodaj do niej stałą listę materials, utworzoną wcześniej listę weights oraz zmienną o nazwie k, zawierającą jednostki pobierania próbek określone w notatce, na przykład: simulation = random.choices(materials, weights , k = insert sampling units ). Użyj zmiennej simulation z wcześniej przygotowaną funkcją write(), aby zapisać dane.
Udaj się do ciemnego znaku X na zielonym dywanie i staw czoło biurku, użyj funkcji random.shuffle() z utworzoną wcześniej listą simulation, aby ją przetasować, na przykład: random.shuffle(simulation). Ta operacja przetasuje listę, nie ma potrzeby przypisywania jej wartości, ponieważ modyfikuje listę bezpośrednio. Utwórz listę o nazwie sample i przypisz jej wartość zwróconą przez random.sample(), dodając listę simulation jako pierwszy argument, a jako drugi argument pobierając próbkę trzech (3) losowych elementów, na przykład: sample = random.sample(simulation, k=3). Użyj zmiennych simulation i sample z wcześniej przygotowaną funkcją write(), aby zapisać nowe próbki.
Na koniec udaj się do ciemnego znaku X na fioletowym dywanie i staw czoło biurku, utwórz zmienną o nazwie defect i przypisz jej wynik funkcji random.uniform(), dodając argumenty 3 i 10. Są to wartości pobierania próbek dla oryginalnej symulacji oraz z niej pobranej próbki; wykorzystamy je do wygenerowania potencjalnych marginesów wadliwości sprzętu na podstawie pobranej próbki.
Utwórz zmienną o nazwie losses i przypisz jej wartość zwróconą przez random.triangular(), dodając wartości 200, 600 i 400. Są to liczby materiałów określone w poprzedniej notatce, konkretnie najniższa, najwyższa oraz wartość najbliższa środkowi. Pozwoli nam to uzyskać trójkątną wartość losową opartą na liczbie materiałów wykorzystanych w symulacji. Użyj wartości defect i losses z wcześniej przygotowaną funkcją write(), aby uzyskać wyniki i ukończyć poziom.