Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Moduły matematyczne
Wprowadzenie do modułu matematyki
Cel
Sprawdź akty własności ziemi oraz granice działek na farmie, zweryfikuj i przetwórz dane liczbowe przy użyciu funkcji modułu math.
W biurze na samym krańcu głównego budynku znajduje się archiwum starych planów budynku oraz akt własności ziemi. Istnieją plany rozbudowy farmy na wschód, ale przed przystąpieniem do analizy jakichkolwiek planów budowlanych ważne jest uporządkowanie dokumentacji. Zostanie to wykonane przy użyciu modułu math w Pythonie.
import math
Podobnie jak wcześniejszy moduł statystyczny, moduł math oferuje zbiór funkcji matematycznych, które możemy wykorzystać do rozszerzenia wbudowanej biblioteki Pythona:
-
math.isnan(): Sprawdza, czy podana wartość nie jest liczbą -
math.isinf(): Sprawdza, czy podana wartość jest nieskończoną liczbą -
math.isfinite(): Sprawdza, czy podana wartość jest skończona -
math.prod(): Mnoży wszystkie podane argumenty -
math.pow(): Przyjmuje dwa argumenty i zwraca wartość pierwszego argumentu podniesionego do potęgi drugiego argumentu. -
math.trunc(): Obcina podany argument, usuwając część dziesiętną liczby zmiennoprzecinkowej, zamieniając ją na liczbę całkowitą. (Nie zaokrągla, tylko usuwa) -
math.copysign(): Przyjmuje dwa argumenty, kopiuje znak (-, +) z drugiego argumentu i przypisuje go do pierwszego. -
math.factorial(): Przyjmuje jeden argument i oblicza silnię, czyli iloczyn kolejnych liczb od podanej wartości do 1. Na przykład, jeśli wartość wynosi5, obliczenia wyglądają następująco:5x4x3x2x1, dając wynik.
Będziemy używać tych funkcji do przejrzenia i zapisania danych, aby przygotować projekty rozwojowe. Istnieją trzy stałe listy zawierające schematy farmy o nazwach: red_schematics, green_schematics, blue_schematics. W tych schematach zapisane są wartości nienumeryczne i nieużyteczne; użyj funkcji matematycznych, aby zidentyfikować elementy i odnaleźć te użyteczne, które można zapisać.
Najpierw udaj się do ciemnego znaku X na czerwonym dywanie i użyj pętli, aby przejść przez elementy stałej listy red_schematics w celu zidentyfikowania elementów użytecznych.
for x in red_schematics: y = math.isnan (float(x)) if y == True: player.speak("Not a Number") else: y = math.isinf(float(x)) if y == True: player.speak("Is infinite") else: player.speak(x)
Pętla przejdzie przez wszystkie elementy listy; funkcja math.isnan() zidentyfikuje wpisy niebędące liczbami, a math.isinf() wykryje nieskończone wartości, które nie mogą być użyte do zbierania danych. Utwórz nową listę o nazwie red_values i użyj składni list comprehension, aby usunąć niepożądane elementy, stosując math.isfinite() jako filtr, w ten sposób: red_values = [x for x in red_schematics if math.isfinite(float(x))].
Następnie zsumuj liczby razem, używając funkcji math.prod() do pomnożenia wszystkich elementów na liście, w następujący sposób: red_values = math.prod(red_values).
Wykonaj ten sam proces filtrowania przy ciemnych znakach X na zielonym i niebieskim dywanie, używając stałych list green_schematics i blue_schematics oraz scalając elementy w listach o nazwach green_values i blue_values.
Przejdź do złotego znaku X, podejdź do biurka i użyj funkcji write(), która jest już zaimplementowana w edytorze, aby zapisać użyteczne dane schematu. Gdy wszystko będzie gotowe, udaj się do jasnego znaku X i użyj funkcji open(), aby uzyskać dostęp do następnego pomieszczenia.
Kiedy już wejdziesz do kolejnego pomieszczenia, znajdziesz tam kilka biurek z aktami własności oraz współrzędnymi. Dobrym pomysłem jest zapisanie pewnych danych przed przejściem do sprawdzania nowych dodatków do farmy w kolejnej części po drugiej stronie mostu. Udaj się do jasnego znaku X przed skrzynią z mapami obok pierwszego biurka, użyj funkcji read(), aby pobrać dane indeksowe aktów własności.
Udaj się do ciemnego znaku X na fioletowym dywanie, utwórz zmienną o nazwie purple_data i użyj funkcji math.pow() do podniesienia danych, które zebrałeś, aby uzyskać informacje o współrzędnych. Podnieś indeks do potęgi 3, w następujący sposób: purple_data = math.pow( -index data- , 3 ) – pamiętaj, aby dodać odczytane wcześniej dane indeksowe. Użyj funkcji math.trunc(), aby usunąć część dziesiętną ze zmiennej, w następujący sposób: purple_data = math.trunc(purple_data). Gdy skończysz, przy znaku X użyj wcześniej zaimplementowanej funkcji write() wraz z purple_data, aby zapisać dane przechowywane w zmiennej.
Na zakończenie, udaj się do jasnego znaku X przed szafką na dokumenty obok najwyższego biurka. Użyj funkcji read(), aby ponownie pobrać dane indeksowe; dane te muszą zostać rozpakowane, aby ujawnić dodatkowe informacje o współrzędnych działki. Utwórz zmienną o nazwie white_data, aby przechować wartość danych znalezionych w pliku oraz zmienną o nazwie sign, aby przechować znak liczby znaleziony w pliku. Udaj się do ciemnego znaku X na białym dywanie i użyj funkcji math.copysign() z dwoma utworzonymi zmiennymi jako argumentami, i przypisz wynik do white_data, w ten sposób: white_data = math.copysign(white_data,sign).
Gdy to zrobisz, użyj math.factorial() z white_data, aby obliczyć iloczyn dla danych indeksowych, przekształć white_data na liczbę całkowitą i użyj tej wartości z funkcją, w następujący sposób: white_data = math.factorial(int(white_data)). Użyj wcześniej zaimplementowanej funkcji write(), aby zapisać white_data i ukończyć poziom.