- 18 kwietnia 2024
- Posted by: Maurycy Gast
- Category: Python
Osoby programujące w C++ zauważyły na pewno, że w tym języku każda funkcja ze standardu std wymaga zaimportowania odpowiednich bibliotek. Dużo łatwiej jest używać funkcji z języka Python, gdyż większa część tych, które będą interesować nas na maturze, nie wymaga żadnego importowania. Można ich używać bez martwienia się o ich dostępność. Wyjątek stanowią niestety funkcje matematyczne, które wymagają importu biblioteki math. Poniżej przedstawione zostaną kolejne przyjazne funkcje w kontekście zadań maturalnych, a następnie poznasz parę najważniejszych funkcji matematycznych.
Obsługa list w języku Python
Listy w języku Python to podstawowy kontener na dane. Aby sprawnie z nich korzystać, warto znać parę wbudowanych metod, służących do ich edycji. Przydatnymi funkcjami są np. append(), extend().
Zacznijmy od najprostszych. Aby rozszerzyć listę, możesz użyć metod append() oraz extend(). Pierwsza z nich dodaje na koniec listy element przekazany jako argument, druga zaś rozszerza listę o wszystkie elementy podane jako lista w argumencie. Można powiedzieć, że extend() łączy dwie listy w jedną.
1 2 3 4 | lista = [1, 2, 3, 4] lista.append(5) # lista = [1, 2, 3, 4, 5] lista.extend([6, 7]) # lista = [1, 2, 3, 4, 5, 6, 7] lista.append([8, 9]) # lista = [1, 2, 3, 4, 5, 6, 7, [8, 9]] - tutaj występuje błąd, bo listę dodano jako pojedynczy element z pomocą append, a nie extend |
Dodatkowo w przypadku użycia extend z pojedynczym argumentem, wystąpi błąd: lista.extend(10) # błąd – argumentem extend() musi być lista.
W przypadku wielu zadań maturalnych będziesz mógł skorzystać z metody remove(), której zadaniem, jak sama nazwa wskazuje, jest usunięcie z listy któregoś elementu. Elementem tym będzie pierwsze znalezione wystąpienie argumentu, np.:
1 2 | lista = [1, 2, 1, 2, 2, 3] lista.remove(3) # lista = [1, 2, 1, 2, 2] |
Czasem potrzebujesz usunąć z listy element na konkretnej pozycji. Wówczas możesz użyć metody pop. Przekazujesz do niej indeks elementu w liście, z której chcesz go usunąć. Innym sposobem usuwania jest słowo kluczowe del, które w przypadku listy zadziała tak samo jak metoda pop. Istnieją dwie główne różnice pomiędzy pop, a del:
- Zwracanie usuniętego elementu – pop, po użyciu zwraca element, który został usunięty. Możesz więc użyć np. zmienna = lista.pop(2), dzięki czemu w zmiennej zostanie zapisany usunięty element.
- Użycie slicingu – w przypadku del, możliwe jest użycie tego typu instrukcji, np. del my_list[2:4], co nie jest możliwe jeśli chodzi o pop.
Poniżej przedstawionych jest parę przykładów usuwania elementów w liście:
1 2 3 4 5 6 | lista = [1, 2, 3, 4, 5] lista.pop(2) # lista = [1, 2, 4, 5] del lista[2] # lista = [1, 2, 5] del lista[1:] # lista = [1] lista = [1, 2, 3, 4, 5] del lista[1:4] # lista = [1, 5] slicing razem z del |
Ciekawym zastosowaniem del oraz slicingu, jest również usuwanie co drugiego elementu (można też wybrać inną wielokrotność indeksów). Slicing w pełnej formie wygląda tak “sekwencja[start:stop:krok]”, gdzie:
- start – początkowy element,
- stop – ostatni element (można go pominąć, co automatycznie wybierze ostatni indeks listy),
- krok – co który element ma być wybrany.
Dlatego możliwe jest usuwanie elementów za pomocą:
1 2 3 4 5 6 7 | lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Usuwa co drugi element od indeksu 1 do 8, czyli usuwa cyfry 2, 4, 6, 8 del lista[1:8:2] # lista = [1, 3, 5, 7, 9, 10] lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Automatycznie został wybrany ostatni indeks danej listy # Usuwa co drugi element od indeksu 1 do końca del lista[1::2] # lista = [1, 3, 5, 7, 9] |
Warto poświęcić w tym momencie chwilę na przećwiczenie usuwania oraz przypomnienie sobie slicingu. Jeśli potrzebujesz odświeżyć wiedzę na ten temat, zapraszam do poprzedniej części wpisu.
Operacje na stringach – Python
W przypadku stringów masz do dyspozycji kilka znaczących funkcji. Możesz na przykład rozdzielić napis do formy tablicy lub złączyć tablicę napisów do jednego stringa.
1 2 3 4 5 6 7 | napis = 'Egzamin maturalny! Zdamy to!' print(napis.split()) # ['Egzamin', 'maturalny!', 'Zdamy', 'to!'] print(napis.split(sep='!')) # ['Egzamin maturalny', ' Zdamy to', ''] # w przypadku, gdy separator występuje na ostatnim miejscu, na końcu listy znajdzie się pusty string wyrazy = ['Egzamin', 'maturalny!', 'Zdamy', 'to!'] separator = '_' # element ten posłuży jako znak/wyraz rozdzielający powyższe elementy listy print(separator.join(wyrazy)) # Egzamin_maturalny!_Zdamy_to! |
Sortowanie w języku Python
Sortowanie odgrywa istotną rolę w przypadku zadań maturalnych. W języku Python posortowanie tablicy jest równoważne z wywołaniem jednej metody i ewentualnym dodaniem do niej parametru reverse=True:
1 2 3 | lista = [1, 3, 2, 56, 23] lista.sort() # lista posortowana rosnąco - [1, 2, 3, 23, 56] lista.sort(reverse=True) # lista posortowana malejąco – [56, 23, 3, 2, 1] |
Dodatkową funkcją, którą warto omówić jest sorted(). Tworzy ona osobną posortowaną listę z elementów listy zawartej w argumencie. Również w tym przypadku może być ona posortowana rosnąco oraz malejąco.
1 2 3 | lista = ['ala', 'ma', 'kota'] lista_posortowana_rosnaco = sorted(lista) # ['ala', 'kota', 'ma'] lista_posortowana_malejaco = sorted(lista, reverse=True) # ['ma', 'kota', 'ala'] |
Obie funkcje sort() i sorted() działają zarówno na tablicach liczb oraz tablicach stringów. Jednak warto pamiętać o tym, że sortowanie liczb jako tekstu, zwróci nieprawidłowe wyniki. Przykładowo, po prawidłowym sortowaniu następującej listy [10, 2, 7, 25, 1], efekt powinien wyglądać tak: [1, 2, 7, 10, 25].
Natomiast jeśli sortowano je jako tekst, wynik wynosi [1, 10, 2, 25, 7]. Taka operacja zwraca 10 przed 2, bo 1 znajduje się leksykograficznie przed wartością 2.
Korzystając z funkcji join oraz sorted można w ciekawy, prosty sposób, bez użycia żadnej pętli wypisać posortowaną tablicę z wybranym przez Ciebie formatowaniem, np.:
1 2 3 | lista_imion = ['Gabrysia', 'Klaudia', 'Andrzej', 'Marcin'] separator = ', ' print(separator.join(sorted(lista_imion))) # Andrzej, Gabrysia, Klaudia, Marcin |
Funkcje matematyczne – Python
Przejdźmy do funkcji matematycznych. Dostępnych jest parę funkcji, których możesz użyć bez importowania bilbioteki math. Przykładem będzie abs(), która oblicza wartość bezwzględną liczby:
1 2 | print(abs(2020)) # 2020 print(abs(-2020)) # 2020 |
Inne funkcje wymagają od Ciebie zaimportowania biblioteki math. Aby to zrobić, musisz na początku programu wpisać poniższą linijkę:
1 | import math |
Wówczas dostępne staną się dla Ciebie funkcje oraz stałe matematyczne, które trzeba poprzedzić nazwą biblioteki np.:
1 | math.sin(math.pi) |
Jeśli natomiast nie chcesz za każdym razem pisać przedrostka “math.”, linijka importu powinna wyglądać nieco inaczej:
1 | from math import * |
W takim wypadku można posługiwać się już funkcjami bez użycia nazwy biblioteki:
1 | cos(pi/2) |
Zauważ, że przy okazji omówiliśmy już 2 funkcje trygonometryczne oraz jedną stałą – sin(), cos() oraz pi. Funkcje te obliczają sinus lub cosinus argumentu, którym jest miara kąta podana w radianach. Pi jest to stała, która określa liczbę pi = 3.1415…, co odpowiada 180 stopni. Jeśli chcesz jednak podać kąt w stopniach, musisz użyć funkcji, która zamieni je na miarę radialną – radians(). Analogicznie możemy użyć funkcji degrees(), która zamieni radiany na stopnie. W takim przypadku możesz napisać na przykład:
1 2 | print(tan(radians(45))) # 0.9999999999999999 = ok. 1, wynik z niewielką niedokładnością print(degrees(pi)) # 180.0 |
Warto zaznaczyć, że o ile dysponujesz funkcją tan(), która oblicza tangens liczby, to nie istnieje funkcja cotangens. Aby obliczyć cotangens liczby, musisz zatem obliczyć odwrotność tangensa – podzielić 1 przez tangens.
Istnieją również funkcje odwrotne do funkcji trygonometrycznych asin(), acos(), atan(). Nie będziemy jednak na nie poświęcać czasu, ponieważ ich użycie na maturze prawdopodobnie nie będzie wymagane. Warto jednak poświęcić chwilę i spojrzeć na dostępne funkcje w bibliotece math. Dokumentację możesz znaleźć pod linkiem:
https://docs.python.org/3/library/math.html
Jeśli nie straszny jest Ci język angielski, wiele z tych funkcji wystarczy kojarzyć po nazwie, a ich użycie jest bardzo intuicyjne. Matematyczne terminy anglojęzyczne mogą jednak nie być przez Ciebie stosowane na co dzień. Terminem takim jest na przykład gcd (greatest common divisor), czyli największy wspólny dzielnik (nwd). Również w matematycznej bibliotece Python jest funkcja, za pomocą której możesz również obliczyć nww (najmniejszą wspólną wielokrotność) – chodzi o lcm (least common multiple), której zastosowanie pokazano poniżej. Możesz to też zrobić ręcznie, zgodnie z zależnością matematyczną A*B = NWD(A, B)*NWW(A, B).
1 2 3 4 5 6 7 8 | a = 16 b = 88 nwd = gcd(a, b) # 8 print(nwd) nww = lcm(a, b) # 176 print(nww) nww = a*b/gcd(a, b) # 176 print(nww) |
Funkcje przedstawione w tym tekście, zdołają Ci pomóc w wielu przypadkach. Są to stosunkowo podstawowe rozwiązania, ale dzięki temu okazują się uniwersalne. Jednocześnie jeśli zależy Ci na pogłębieniu swojej wiedzy ponad to, co jest potrzebne na maturze, dobrze zapoznać się z możliwościami biblioteki Math. Z jej pomocą zdołasz wykonywać jeszcze bardziej skomplikowane obliczenia niż wcześniej.
Sprawdź także inne przydatne funkcje Pythona na maturze z informatyki!
Najczęściej zadawane pytania o przydatne funkcje w Python
Co to jest parametr key w funkcji sorted() i jak go używać?
Parametr key w funkcji sorted() w Pythonie pozwala określić funkcję, która zostanie użyta do generowania kluczy sortowania dla każdego elementu. Pozwala to na niestandardowe sortowanie, na przykład według określonego atrybutu obiektu lub według pewnej funkcji klucza. Przykładowo key=len oznacza, że lista będzie sortowana według długości każdego słowa.
Czy zawsze jest zalecane importowanie wszystkich funkcji z modułu za pomocą from module import *?
Importowanie wszystkich funkcji z modułu za pomocą from module import * nie jest zawsze zalecane. W bardziej skomplikowanych programach lepszym podejściem jest importowanie tylko potrzebnych funkcji lub modułów, co poprawia czytelność kodu i unika potencjalnych problemów.
Czy sortowanie stringów różni się od sortowania liczb?
W kontekście zastosowania funkcji sorted(), sortowanie stringów i liczb w Pythonie jest podobne. Python sortuje elementy na podstawie ich porządku leksykograficznego, czyli stringi są sortowane według alfabetu, natomiast liczby według wartości.
Wpisy, które mogą Cię zainteresować:
2 komentarze
Comments are closed.
Czy w części pisemnej egzaminu, konstruując algorytm, mogę korzystać z pythonowego slicingu? Co z pythonowymi list comprehensions?
Centralna Komisja Egzaminacyjna zaleca, by na części teoretycznej zapisywać algorytmy w formie pseudokodu. Wówczas wszystkie Pythonowe ułatwienia i skróty nie przychodzą uczniom do głowy. 🙂 Niestety zazwyczaj w treści zadania jest podana informacja, że uczeń może korzystać jedynie z podstawowych elementów języka programowania. Zachęcam do zapoznania się z arkuszami maturalnymi, w szczególności najnowszymi. Tam taka informacja jest dodana do każdego zadania polegającego na napisaniu własnego algorytmu. Link do arkuszy: https://www.korepetycjezinformatyki.pl/arkusze-maturalne/