Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki
Przykład 1

Zdefiniujemy funkcję sprawdzającą, czy podane wyrażenie jest palindromem.

W tym celu wykorzystamy pętlę for oraz instrukcję warunkową if ... else.

Przyjmujemy następującą strategię: jeśli wyraz jest palindromem, to jego pierwsza litera będzie taka sama jak ostatnia, druga będzie taka sama jak przedostatnia itd. Dopóki nie dojdziemy do połowy wyrazu. Dalsze porównywanie nie ma sensu, ponieważ będziemy porównywać te same pary znaków.

Linia 1. def palindrom podkreślnik petla otwórz nawias okrągły tekst zamknij nawias okrągły dwukropek. Linia 2. dlugosc znak równości len otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 3. polowa znak równości dlugosc prawy ukośnik prawy ukośnik 2. Linia 4. for i in range otwórz nawias okrągły polowa zamknij nawias okrągły dwukropek. Linia 5. if tekst otwórz nawias kwadratowy i zamknij nawias kwadratowy wykrzyknik znak równości tekst otwórz nawias kwadratowy dlugosc minus i minus 1 zamknij nawias kwadratowy dwukropek. Linia 6. return False. Linia 7. else dwukropek. Linia 8. return True. Linia 11. kratka przykład wywołania. Linia 13. print otwórz nawias okrągły palindrom podkreślnik petla otwórz nawias okrągły cudzysłów kobyłamamałybok cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 14. True. Linia 15. print otwórz nawias okrągły palindrom podkreślnik petla otwórz nawias okrągły cudzysłów możejutrotadamasamadatortujeżom cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 16. True. Linia 17. print otwórz nawias okrągły palindrom podkreślnik petla otwórz nawias okrągły cudzysłów Kobyła ma mały bok cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 18. False. Linia 19. print otwórz nawias okrągły palindrom podkreślnik petla otwórz nawias okrągły cudzysłów test cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 20. False.

Zapiszemy funkcję realizującą to samo zadanie z użyciem wyrażenia indeksującego. Zwróćmy uwagę, o ile krótsza jest teraz lista instrukcji:

Linia 1. def palindrom podkreślnik indeks otwórz nawias okrągły tekst zamknij nawias okrągły dwukropek. Linia 2. return tekst znak równości znak równości tekst otwórz nawias kwadratowy dwukropek dwukropek minus 1 zamknij nawias kwadratowy. Linia 4. kratka przykład wywołania. Linia 5. print otwórz nawias okrągły palindrom podkreślnik indeks otwórz nawias okrągły cudzysłów kobyłamamałybok cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 6. True. Linia 7. print otwórz nawias okrągły palindrom podkreślnik indeks otwórz nawias okrągły cudzysłów możejutrotadamasamadatortujeżom cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 8. True. Linia 9. print otwórz nawias okrągły palindrom podkreślnik indeks otwórz nawias okrągły cudzysłów Kobyła ma mały bok cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 10. False. Linia 11. print otwórz nawias okrągły palindrom podkreślnik indeks otwórz nawias okrągły cudzysłów test cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 12. False.
Ważne!

Pamiętajmy, że wielkość liter i znaki przestankowe mają znaczenie podczas sprawdzania, czy wyrażenie jest palindromem. Działanie pierwszej z  przedstawionych funkcji polega na porównywaniu odpowiadających sobie elementów po obu stronach ciągu. Ludzki mózg potrafi zignorować znaki, które uznaje za zbędne i brać pod uwagę wyłącznie litery (a także nie uwzględniać ich rozmiaru). Komputer nie jest w stanie tego zrobić.

Druga funkcja porównuje dwa ciągi od początku.

Jak zatem należy zdefiniować funkcję, aby móc sprawdzać bardziej skomplikowane łańcuchy znaków? Musimy najpierw pozbyć się takich elementów, jak spacja, średnik, przecinek, dwukropek, kropka, wykrzyknik lub znak zapytania, a następnie zamienić wielkie litery na małe albo małe na wielkie (czyli sprawić, że wszystkie znaki będą jednakowej wielkości). Dopiero wówczas możemy zająć się badaniem ciągu.

1
Polecenie 1

Zdefiniuj funkcję sprawdz_palindrom(tekst), która będzie działać zgodnie z przedstawionymi założeniami i wykorzysta wyrażenia indeksujące.

Dla zainteresowanych

Aby uprościć zapis naszej funkcji, możemy wykorzystać wyrażenia regularnewyrażenia regularnewyrażenia regularne. Ze stosowanym w tym celu parametrem r"[!?, ;:.]" zapoznamy się dokładnie w oficjalnej dokumentacji języka Python i modułu re.

Linia 1. def palindrom podkreślnik indeks podkreślnik re otwórz nawias okrągły tekst zamknij nawias okrągły dwukropek. Linia 2. import re. Linia 3. tekst znak równości re kropka subn otwórz nawias okrągły r cudzysłów otwórz nawias kwadratowy średnik przecinek dwukropek kropka wykrzyknik znak zapytania zamknij nawias kwadratowy cudzysłów przecinek cudzysłów cudzysłów przecinek tekst zamknij nawias okrągły otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 4. tekst znak równości tekst kropka lower otwórz nawias okrągły zamknij nawias okrągły. Linia 6. return tekst znak równości znak równości tekst otwórz nawias kwadratowy dwukropek dwukropek minus 1 zamknij nawias kwadratowy. Linia 8. kratka przykład testowania. Linia 9. print otwórz nawias okrągły palindrom podkreślnik indeks podkreślnik re otwórz nawias okrągły cudzysłów Kobyła średnik ma kropka mały bok wykrzyknik cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 10. True.

Tworzenie łańcuchów znaków f‑string

W poprzednich e‑materiałach dowiedzieliśmy się, w jaki sposób wyświetlać napisy lub inne obiekty na ekranie. Korzystaliśmy przy tym z funkcji print() oraz z metody format().

Język Python, począwszy od wersji 3.5, oferuje dodatkowy mechanizm formatowania o nazwie f‑string. Jest to ułatwiająca tworzenie kodu modyfikacja sposobu wywołania funkcji print(). Oto przykład jej zastosowania:

Linia 1. zmienna znak równości 123. Linia 2. print otwórz nawias okrągły f apostrof Napis na ekran z otwórz nawias klamrowy zmienna zamknij nawias klamrowy do podstawienia kropka apostrof zamknij nawias okrągły. Linia 4. Napis na ekran z 123 do podstawienia kropka.

Jak widzimy, przed apostrofem lub cudzysłowem otwierającym ciąg znaków do wyświetlenia należy wpisać literę f. W nawiasach klamrowych wewnątrz ciągu trzeba natomiast podać nazwę obiektu, który zostanie wstawiony w to miejsce.

1
Przykład 2

Python dba o konwersję typu obiektów w ramach f‑string (nie musimy zamieniać typów int czy float na str). Sprawdźmy nowy sposób wywoływania funkcji print():

Linia 1. from math import sqrt. Linia 2. rok znak równości 2019. Linia 3. urodzony znak równości 1974. Linia 4. lat znak równości rok minus urodzony. Linia 5. pelnoletni znak równości lat minus 18. Linia 6. pi znak równości 3 kropka 141592. Linia 7. r znak równości 19 kropka 53. Linia 8. obwod znak równości 2 asterysk pi asterysk r. Linia 9. bok1 znak równości 20. Linia 10. bok2 znak równości 14 kropka 68. Linia 11. przekatna znak równości sqrt otwórz nawias okrągły bok1 asterysk asterysk 2 plus bok2 asterysk asterysk 2 zamknij nawias okrągły. Linia 12. print otwórz nawias okrągły cudzysłów Oto nasze obliczenia dwukropek cudzysłów zamknij nawias okrągły. Linia 13. print otwórz nawias okrągły f cudzysłów Mamy rok otwórz nawias klamrowy rok zamknij nawias klamrowy kropka Osoba urodzona w roku otwórz nawias klamrowy urodzony zamknij nawias klamrowy ma otwórz nawias klamrowy lat zamknij nawias klamrowy lat kropka cudzysłów zamknij nawias okrągły. Linia 14. print otwórz nawias okrągły f cudzysłów Jest pełnoletnia od otwórz nawias klamrowy pelnoletni zamknij nawias klamrowy lat kropka cudzysłów zamknij nawias okrągły. Linia 15. print otwórz nawias okrągły cudzysłów minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus cudzysłów zamknij nawias okrągły. Linia 16. print otwórz nawias okrągły f cudzysłów Jest okrąg o promieniu otwórz nawias klamrowy r zamknij nawias klamrowy minus jego obwód wynosi otwórz nawias klamrowy obwod zamknij nawias klamrowy kropka cudzysłów zamknij nawias okrągły. Linia 17. print otwórz nawias okrągły f cudzysłów Dany jest trójkąt prostokątny o bokach a znak równości otwórz nawias klamrowy bok1 zamknij nawias klamrowy i b znak równości otwórz nawias klamrowy bok2 zamknij nawias klamrowy kropka cudzysłów zamknij nawias okrągły. Linia 18. print otwórz nawias okrągły f cudzysłów Długość boku c wg wzoru Pitagorasa wynosi otwórz nawias klamrowy przekatna zamknij nawias klamrowy kropka cudzysłów zamknij nawias okrągły. Linia 20. Oto nasze obliczenia dwukropek. Linia 21. Mamy rok 2019 kropka Osoba urodzona w roku 1974 ma 45 lat kropka. Linia 22. Jest pełnoletnia od 27 lat kropka. Linia 23. minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 24. Jest okrąg o promieniu 19 kropka 53 minus jego obwód wynosi 122 kropka 71058352000001 kropka. Linia 25. Dany jest trójkąt prostokątny o bokach a znak równości 20 i b znak równości 14 kropka 68 kropka. Linia 26. Długość boku c wg wzoru Pitagorasa wynosi 24 kropka 80932082907551 kropka.

Użycie przedstawionego sposobu zapisu sprawia, że programiście łatwo jest przeanalizować kod programu.

1
Polecenie 2

Zdefiniuj funkcję prostokat(bok_a, bok_b), która obliczy obwód, pole powierzchni oraz długość przekątnej prostokąta o podanych wymiarach, a następnie poda wszystkie te informacje, wykorzystując formatowanie f‑string.

Dla zainteresowanych

Informacje na temat formatowania z zastosowaniem mechanizmu f‑string znajdziemy w dokumencie [PEP‑498].

Problem 1

Napisz program sprawdzający, czy dany napis jest palindromem.

Specyfikacja:

Dane:

  • zdanie – łańcuch znaków

Wynik:

  • Komunikat Napis jest palindromem lub Napis nie jest palindromem.

R1dwAEsBjwbBb
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.

Słownik

wyrażenie indeksujące
wyrażenie indeksujące

(ang. slice) zapisane w nawiasach kwadratowych wyrażenie, które pozwala wskazać wybraną część sekwencji; może mieć ono postać [a:b] lub [a] (bądź podobną); nazywane także wycinkiem

wyrażenia regularne
wyrażenia regularne

wzorzec pomocny podczas opisywania znaków w łańcuchu tekstowym; w języku Python dostępny w module standardowym re