Przydatne funkcje w języku Python | Korepetycje do matury z informatyki - Maurycy Gast

Przydatne funkcje w języku Python

Wstęp

Zadania maturalne z programowania wymagają od nas wymyślenia własnego algorytmu. Często jednak zdarza się, że wymyślone przez nas algorytmy korzystają z rozwiązań, które są powszechnie spotykane w informatyce. Projektanci języków programowania starają się dbać o to, żeby rozwiązywanie typowych problemów było łatwo dostępne dla programistów. Idealnym przykładem jest język Python, w którym przetwarzanie list (tablic) odbywa się za pomocą wbudowanej notacji, która niedostępna jest w językach takich jak C++ czy Java.

Oto kilka ciekawych funkcji w Pythonie, które ułatwią pracę na maturze z informatyki.

Indeksowanie ujemne

Na rozgrzewkę poruszymy temat indeksowania ujemnego w tablicach. Na maturze bardzo przydatne może okazać się pobieranie elementu z listy (tablicy), który jest nie na jej początku, ale na końcu. Wówczas możemy zastosować notację:

ostatni_element = lista[-1]

Zauważ, że to samo możemy osiągnąć za pomocą funkcji len, która zwraca długość tablicy. Powyższa linijka równoważna jest z:

ostatni_element = lista[len(lista)-1]

Listę w Pythonie możemy zatem wizualizować sobie trochę jak koło, które powstaje przez sklejenie końca i początku tablicy.

startswith() i endswith()

Skoro jesteśmy jeszcze przy prostych funkcjach, możemy sobie pozwolić na szybkie pokazanie, w jaki sposób działają startswith() i endswith():

lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
print(lista.startswith([0, 1, 2])      # true
print(lista.startswith([8, 9])         # false
print(lista.endswith([0, 1, 2])        # false
print(lista.endswith([8, 9])           # true

Funkcje te po prostu sprawdzają, czy dana lista zaczyna się podaną w jej argumencie sekwencją/elementem.

upper() i lower()

Kolejne proste funkcje, które warto znać wybierając się na egzamin maturalny, to upper() i lower(). Metody te zamieniają wszystkie litery w łańcuchu znaków na wielkie lub małe.

napis = 'Matura 2020'
print(napis.lower())    # 'matura 2020'
print(napis.upper())    # 'MATURA 2020'

strip(), lstrip() i rstrip()

Metody te są bardzo przydatne w przypadku operacji na stringach. Zdarzają się zadania maturalne, które wymagają od nas usunięcia pewnych elementów, które występują na początku lub na końcu napisu. Podane funkcje rozwiązują właśnie takie przypadki. Jako argument przyjmują one listę elementów, których chcemy się pozbyć. Użycie metody lstrip() na liście powoduje usuwanie od lewej strony wszystkich wystąpień elementów przekazanych w argumencie do momentu, w którym napotkany zostanie pierwszy element, który nie występuje w argumencie. Metoda rstrip() działa tak samo, lecz od prawej strony, a metoda strip() – od obu stron – tak samo jak wywołanie obu funkcji na raz. Jeśli nie podamy argumentu przy wywoływaniu tychże metod, otrzymamy napis, z którego zostaną usunięte początkowe i/lub końcowe spacje. Warto poświęcić trochę czasu i przetestować działanie wymienionych metod, ponieważ ich zrozumienie może powodować trudności.

napis = 'Matura 2020'
rok = napis.lstrip('aMrtu ')         # '2020'
przedrostek = napis.rstrip('20 ')    # 'Matura'
srodek = napis.strip('aMtu0')        # 'ra 202'

Konwersja między typami

Zmiana typu zmiennych w języku Python jest bajecznie prosta. Wystarczy użyć funkcji, która jest nazwą typu zmiennej docelowej. Tym sposobem można na przykład zamienić string na int albo float na int itd.

napis = '1234'
liczba = int(napis)        # konwersja typu string do typu int
zmiennoprzecinkowa = 1.643
liczba = int(napis)        # konwersja typu float do typu int, ucięta zostaje część ułamkowa

Konwersja między systemami liczbowymi

Język Python oferuje nam także możliwość zamiany podstawy liczby podczas konwersji typu string na int. Wówczas możemy pozyskać rzeczywistą wartość liczby zapisanej w postaci string, przez podanie dodatkowego parametru base w wywołaniu funkcji. Np.:

napis = '1234ABCD'              # liczba szesnastkowa
liczba = int(napis, base=16)    # 305441741 – wartość dziesiętna

W tym momencie, aby przekonwertować liczbę na inny system, możemy skorzystać z wbudowanych funkcji bin(), oct() i hex(), które zamieniają liczbę całkowitą na string o odpowiedniej podstawie 2, 8 lub 16. Problematyczny może jednak okazać się fakt, że funkcje te dodają odpowiedni prefiks w zależności od podstawy. String powstały w wyniku funkcji bin(), będzie miał na początku ‘0b’, w przypadku funkcji oct() – ‘0o’, a w przypadku hex() – ‘0x’. Jednak z pomocą przyjdzie nam omówiona wcześniej funkcja lstrip().

liczba = 109312
liczba_bin = bin(liczba).lstrip('0b')    # '11010101100000000'
liczba_oct = oct(liczba).lstrip('0o')    # '325400'
liczba_hex = hex(liczba).lstrip('0x')    # '1ab00'

W przypadku zadań z programowania na praktycznej części matury, zamiana liczb między najpopularniejszymi systemami w języku Python nie wymaga od nas wiele myślenia i jest dużo prostsza niż np. w języku C++.

index() i count()

Kolejne przydatne, lecz bardzo proste funkcje to index() oraz count(). Sprawdzają one, czy dana lista (ciąg elementów) zawiera przekazany parametr (podciąg) oraz w jakim miejscu i ilości.

ciag = [ 1, 1, 2, 3, 5, 8, 13, 21 ]
print(ciag.index(1))          # 0 – pierwsze wystąpienie jedynki
print(ciag.count(1))          # 2 – dwa razy wystąpiła jedynka
print(ciąg.index([1, 1])      # 0 – lista zawiera podciąg od indeksu 0
print(ciag.count([2, 2])      # 0 – lista nie zawiera podciągu
print(ciag.index([1, 5]))     # w tym miejscu otrzymamy błąd

Błąd pojawił się ze względu na to, że ciag nie zawiera podciągu [1, 5]. Aby uniknąć takiej sytuacji należy najpierw sprawdzić właśnie metodą count(), czy szukany podciąg występuje.

if ciag.count([1, 5]) > 0:
    print(ciag.index([1, 5]));

Slicing

Trudniejszym tematem, który okazuje się być bardzo przydatny na maturze będzie tzw. „slicing”, czyli „krojenie na części”. Zacznijmy od pokazania paru przykładów:

lista = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
lista1 = lista[2:]      # [2, 3, 4, 5, 6, 7, 8, 9]
lista2 = lista[:2]      # [0, 1]
lista3 = lista[-2:]     # [8, 9]
lista4 = lista[:-2]     # [0, 1, 2, 3, 4, 5, 6, 7]
lista5 = lista[2:-2]    # [2, 3, 4, 5, 6, 7]

Łatwo zauważyć, że w notacji lista[start:stop] start oznacza indeks elementu, od którego zaczynamy tworzenie nowej listy, a stop – końcowy. W przypadku, gdy start lub stop nie jest podany, traktujemy je odpowiednio jako 0 i len(lista), czyli długość listy. Na maturze składnia ta może być pomocna w przypadku modyfikacji stringów, na przykład przy konwersji liczb dwójkowych na szesnastkowe. Wówczas możemy pobierać 4 ostatnie cyfry liczby zapisanej jako łańcuch znaków za pomocą slicingu:

liczba = '10101101001’
print(liczba[-4:])    # '1001' łatwo zamienić na 9

W wielu językach taki efekt można osiągnąć za pomocą funkcji substring, ale jej użycie ograniczone jest tylko do stringów.

Dla trochę bardziej ciekawych warto powiedzieć, że przy slicingu można użyć także trzeciego argumentu, który oznacza o ile elementów będziemy przeskakiwać. Zagadnienie to nie jest aż tak przydatne w zadaniach maturalnych, dlatego można je pominąć, jeśli nie mamy dużo czasu do egzaminu.

Zadania do samodzielnej implementacji

  1. Napisz program, który będzie konwerterem liczb między różnymi systemami liczbowymi. Użytkownik powinien móc wybrać, w jakim systemie wpisuje liczbę oraz do jakiego systemu chce ją przekonwertować. Wykorzystaj funkcje opisane w powyższym wpisie.
  2. Napisz program, który pobierze od użytkownika ciąg znaków i wypisze z niego wszystkie znaki, które nie są cyframi, oddzielając je znakiem nowej linii. Wykorzystaj funkcje strip(), lstrip lub rstrip() oraz slicing.

Wpisy, które mogą Cię zainteresować:



Dodaj komentarz

kurs maturalny informatyka