Dzisiejszy artykuł rzuci Ci masę światła na wyjaśnienie jednego z podstawowych typów danych w Pythonie 💡. Jest nim łańcuch znaków, który w języku Python nosi nazwę "str". Przedstawię Ci nie tylko jego zastosowanie, lecz także jak go utworzyć i jakie operacje można na nim przeprowadzać 😊. Zapraszam do zapoznania się z treścią 🙂!

WYJAŚNIAM JAK OBSŁUGIWAĆ ŁAŃCUCH ZNAKÓW W JĘZYKU PYTHON!

Zanim przejdziemy do przykładów, trzeba najpierw wyjaśnić sobie sam termin: "łańcuch znaków" 📖!

CZYM JEST ŁAŃCUCH ZNAKÓW W JĘZYKU PYTHON?

W Pythonie, łańcuch znaków oznacza typ danych noszący nazwę "str" i jest przeznaczony do przechowywania dowolnych ciągów znaków 💡. To jest poprawne stwierdzenie ✅. Nie tekstów, tylko ciągów znaków! Zwracam na to uwagę, bo formalnie to nie jest właściwe określenie ❌. Porównaj sobie te 2 przypadki 👇:

  • "Ala ma Pythona" (jest łańcuchem i jest tekstem ✅),
  • "*** ** *******" (jest łańcuchem, lecz nie jest tekstem ❌!).

Teraz już wiesz dlaczego określa się to "łańcuchem znaków" 😊. Bo nie każdy łańcuch może być tekstem, czyli jakimkolwiek zbiorem słów nadającym się do przeczytania 😅. To może być dowolny znak, niekoniecznie litera ⚠️!

Przyjrzyjmy się teraz budowie na przykładach kodów źródłowych 🔍!

JAK UTWORZYĆ ŁAŃCUCH ZNAKÓW W JĘZYKU PYTHON?

Łańcuch znaków w języku Python tworzymy za pomocą pary znaków oznaczających początek i koniec "traktowania" znaków jako fragmentów łańcucha 👀. W programowaniu przyjmuje się powszechnie taki znak za cudzysłów ("), natomiast tutaj w Pythonie mamy jeszcze do dyspozycji apostrofy do wyznaczania "granic" łańcucha 😲!

Należy pamiętać, że choć Python zezwala na "objęcie" łańcucha cudzysłowami lub apostrofami naprzemiennie, to nie każdy język Ci na to pozwoli ⛔! Tradycyjnie, apostrofy przeznaczone są dla pojedynczych znaków np. litera 'a'. Cudzysłowy stosuje się wyłącznie do łańcuchów znaków np. "ABC"! Pamiętaj, że łańcuch też może składać się tylko z jednego znaku! Natomiast w Pythonie nie ma takiego rozróżnienia ℹ️.

Rozpatrzmy 2 przykłady tego samego łańcucha, tylko jeden niech korzysta z cudzysłowów, a drugi z apostrofów 😊! To jest przykład z użyciem cudzysłowów 👇:

print("Mój łancuch znaków")

a to ten sam przykład z użyciem apostrofów 👇:

print('Mój łancuch znaków')

Obie formy są poprawne, równoważne i obie wyświetlą w konsoli treść "Mój łańcuch znaków" 👍.

Łańcuch znaków w języku Python

Łańcuch znaków w języku Python przeznaczony jest do przechowywania dowolnych ciągów znaków, nie tylko tekstów! Python pozwala nie tylko na wyznaczania granic łańcucha cudzysłowami, lecz także apostrofami!

KIEDY W JĘZYKU PYTHON STOSOWAĆ CUDZYSŁÓW DO ŁAŃCUCHÓW ZNAKÓW, A KIEDY APOSTROF?

Nie ma różnicy w jednym ani w drugim podejściu ℹ️. Za wyborem przemawia tylko czyjaś preferencja i wola korzystania z jednego lub drugiego znaku. To zaczyna mieć znaczenie w chwili, gdy jeden ze znaków (cudzysłów lub apostrof) ma być fragmentem łańcucha znaków 💥!

Popatrz na ten przykład 👇:

print('Tu jest napisane "Python"')

Ujmując prostymi słowy, aby cudzysłów mógł zostać użyty wewnątrz łańcucha, nie może być zarezerwowany jako znak do wyznaczania jego granic ❌. A tutaj mamy to samo w drugą stronę 👇:

print("Widać na mapie znak 'X'")

Tym razem apostrof musi zostać "zwolniony", aby mógł zostać użyty wewnątrz łańcucha 😮!

Od razu piszę, że nie trzeba "poświęcać" jednego znaku, aby móc drugim wyznaczać granice łańcucha 😳. Można tak zrobić, aby ten sam znak wyznaczał granice i występował jednocześnie wewnątrz łańcucha, lecz wtedy trzeba zastosować specjalny znak nazywany "znakiem ucieczki" (ang. escape character) 🔥! To jest znak, którego zadaniem jest zmiana standardowego kontekstu danego znaku ℹ️. Charakteryzuje się dodatkowym znakiem w postaci ukośnika wstecznego, nazywanego jako "backslash" (\) 🔥.

Spójrz teraz na te same przykłady z użyciem "znaku ucieczki" 👀. To jest pierwszy 👇:

print("Tu jest napisane \"Python\"")

Mamy cudzysłowy w obu miejscach 😲! Zauważ jednak, że w miejscach, które są fragmentami łańcucha jest dodatkowo wstawiony ukośnik wsteczny 💥! Python wtedy dochodzi do wniosku, że ten cudzysłów nie powinien być traktowany "jak zwykle" i uzna go jako fragment łańcucha ✔️!

Teraz drugi przykład 👇:

print('Widać na mapie znak \'X\'')

Mamy ten sam schemat. Ten sam znak w obu wystąpieniach i dodatkowe ukośniki wsteczne tam, gdzie apostrofy mają być znakami łańcucha 💥!

Mam nadzieję, że udało mi się wyjaśnić w sposób klarowny to zagadnienie, które mogło rodzić wiele pytań odnośnie tego, kiedy użyć jednego znaku, a kiedy drugiego 😉.

Cudzysłów i apostrof wewnątrz łańcucha znaków w języku Python

Jest możliwość sprawienia, aby cudzysłów lub apostrof znalazł się w łańcuchu jako jeden ze znaków. Możesz skorzystać z drugiego znaku, którego nie potrzebujesz w łańcuchu do wyznaczania granic bądź skorzystać ze "znaku ucieczki".

Podsumowując, albo otaczasz cały tekst jednym znakiem, a w środku wstawiasz drugi (w zależności od potrzeb), albo korzystasz ze znaku ucieczki gdy jeden ze znaków przeznaczony do wyznaczania granic łańcucha, ma być traktowany jak jeden ze znaków łańcucha 👍.

Teraz przechodzimy do kolejnego tematu: łańcuch znaków z wieloma wierszami 🔥!

JAK UTWORZYĆ ŁAŃCUCH WIELOWIERSZOWY W JĘZYKU PYTHON?

Łańcuch znaków, który ma składać się z wielu wierszy, w języku Python możemy stworzyć na 2 sposoby 👇:

  1. używając tzw. "znaków ucieczki" (ang. escape characters) dających efekt identyczny do wciśnięcia klawisza Enter,
  2. używając trzech tych samych znaków wyznaczających granicę łańcucha, zamiast jednego (wyjątkowo w Pythonie ⭐).

Zobaczmy obie metody 😉!

JAK UTWORZYĆ ŁAŃCUCH WIELOWIERSZOWY W JĘZYKU PYTHON PRZY POMOCY ZNAKÓW UCIECZKI?

Aby w Pythonie stworzyć łańcuch wielowierszowy przy użyciu znaków ucieczki (ang. escape characters), korzystamy ze wspomnianego znaku będącego połączeniem ukośnika wstecznego (\) i małej litery 'n' 👇:

'\n'

umieszczając je w te miejsca, w których łańcuch znaków ma "otrzymać" następny wiersz 👍. Oto przykład 👇:

print('Mój łańcuch znaków\nposiada drugi wiersz!')

Jak się przyjrzysz, to możesz dostrzec ciąg "\n" pomiędzy słowami "znaków" i "posiada" 👀. Ten znak ucieczki zostanie zamieniony na przejście do nowego wiersza, dokładnie tak jakbyśmy nacisnęli klawisz Enter ⏏️.

Teraz drugi sposób 😄!

JAK UTWORZYĆ ŁAŃCUCH WIELOWIERSZOWY W JĘZYKU PYTHON PRZY POMOCY CIĄGU TRZECH TYCH SAMYCH ZNAKÓW?

Python posiada możliwość utworzenia łańcucha wielowierszowego korzystając z tych samych znaków wyznaczających granice łańcucha (cudzysłowów lub apostrofów), lecz tym razem musi on zostać wstawiony 3 razy, zamiast jednego! Ten sam przykład do porównania:

print('''Mój łańcuch znaków
posiada drugi wiersz!''')

To da identyczny efekt ✅. Tylko posługując się tym zapisem, trzeba uważać, aby nie dać się nabrać 😳! Ta metoda pobiera wszystkie znaki od początku wiersza, co oznacza że gdy wstawimy sobie tabulatory celem poprawienia wyglądu w kodzie 👇:

print('''Mój łańcuch znaków
		posiada drugi wiersz!''')

to taki sam odstęp znajdzie się w łańcuchu ⚠️! Musisz na to uważać 🫵!

Łańcuch znaków z wieloma wierszami w języku Python

Wielowierszowy łańcuch znaków w języku Python może zostać utworzony albo przy pomocy "znaku ucieczki", albo z użyciem ciągu 3 takich samych znaków wyznaczających granice dla łańcucha!

Mamy za sobą wyjaśnienie jak się robi łańcuchy wielowierszowe 😁. Przechodzimy do konkatenacji ⏩!

NA CZYM POLEGA KONKATENACJA ŁAŃCUCHÓW ZNAKÓW W JĘZYKU PYTHON?

Konkatenacja łańcuchów znaków w języku Python, to prostymi słowy "połączenie" kilku łańcuchów znaków w jeden ℹ️. Możesz to porównać do puzzli 🧩, w których także łączysz ze sobą pojedyncze elementy, aby powstał z nich jeden cały obraz 👍.

Załóżmy, że mamy dwa łańcuchy 👇:

string_a = 'Jeden łańcuch'
string_b = ' z drugim'

i chcemy je ze sobą połączyć (skorzystałem ze zmiennych, o których możesz więcej poczytać w osobnym artykule ℹ️). \

Możemy to łatwo zrobić używając operatora dodawania, który poza oczywistym zastosowaniem arytmetycznym do sumowania liczb, pozwala też na wykonanie konkatenacji (jeśli składnikami są łańcuchy, a nie liczby ⚠️):

print(string_a + string_b)

Efektem końcowym będzie jeden łańcuch o treści 👇:

"Jeden łańcuch z drugim"

Zwróć uwagę, że aby zachować prawidłowy odstęp pomiędzy jednym łańcuchem a drugim, musisz samodzielnie dodać spację (' '). Albo umieszczasz ją w jednym z łańcuchów, albo dodajesz jako składnik konkatenacji, o tak 👇:

print(string_a + ' ' + string_b)

Polecam ten sposób, bo wtedy ta spacja jest dużo bardziej zauważalna ✅.

Konkatenacja łańcuchów znaków w języku Python

Konkatenacja łańcuchów znaków polega na "sklejeniu" kilku osobnych łańcuchów w jeden kompletny ciąg!

Mamy z głowy kolejny wątek 😉! Przejdźmy teraz do operacji na łańcuchach (aby nie pisać "na stringach", bo kojarzy się to z czymś innym 😆)!

JAKIE MOŻNA WYKONYWAĆ OPERACJE NA ŁAŃCUCHACH ZNAKÓW W JĘZYKU PYTHON?

W Pythonie są 4 operacje jakie można wykonywać bezpośrednio na łańcuchach znaków. Są to 👇:

  1. pobieranie pojedynczego znaku,
  2. pobieranie fragmentu łańcucha,
  3. "mnożenie" łańcuchów,
  4. porównywanie ze sobą dwóch łańcuchów.

I opisuję każdy z nich ⏩! Będę prezentował przykłady na łańcuchu o takiej postaci 👇:

my_string = 'Mój łańcuch znaków'
JAK POBRAĆ POJEDYNCZY ZNAK Z ŁAŃCUCHA ZNAKÓW W JĘZYKU PYTHON?

W Pythonie, pobieranie pojedynczego znaku z łańcucha wykonujemy stosując taki sam zapis, jaki dotyczy pobierania elementów z listy (struktury danych służącej do przechowywania wielu elementów w jednym miejscu ℹ️). Więcej o samych listach jest w osobnym artykule.

Przykładowo, gdy interesuje nas pobranie pierwszego znaku z łańcucha, piszemy tak 👇:

print(my_string[0])

Czyli zobacz, że łańcuch znaków w języku Python to w rzeczywistości lista, taka sama jak każda inna 😮! Gdybyśmy jednak chcieli być bardziej poprawni, to zarówno łańcuch znaków jak i lista, są sekwencjami 🔥! I to sekwencjom zawdzięczamy sposób przedostawania się do elementów w sposób znany z innych języków programowania 😱!

W taki sam sposób możesz pobrać każdy inny znak z łańcucha, na przykład tak pobierzesz dziesiąty w kolejności 👇:

print(my_string[9])

Jak zdążyłeś(-aś) zauważyć, elementy liczone są od zera, a nie od jedynki ⚠️! I co równie ważne, to nie jest reguła, która obowiązuje tylko w Pythonie, lecz jest ogólnie przyjętą normą w zdecydowanej większości języków programowania ⚠️!

Korzystając z takiego zapisu musisz uważać na to, aby nie "wyjść" poza rozmiar łańcucha wprowadzając zbyt duży indeks (liczba naturalna określająca element sekwencji w kolejności ℹ️):

print(my_string[99])

Próba pobrania nieistniejącego elementu spowoduje awarię programu o treści "IndexError" (indeks "poza zasięgiem") 💥. W rzeczywistości program zgłosi wyjątek, lecz to nie jest moment na wyjaśnianie tematu przechwytywania wyjątków (na to jest osobny materiał ℹ️).

Możesz chcieć pobrać ostatni znak z łańcucha i wtedy przyda się funkcja "len" do wyznaczania długości 👇:

print(my_string[len(my_string) - 1])

Tylko wtedy musisz odjąć wynik funkcji o jeden, gdyż poruszamy się po indeksach ⚠️!

Pobieranie pojedynczego znaku z łańcucha znaków w języku Python

Pobieranie pojedynczego znaku z łańcucha polega na użyciu tej samej notacji indeksowej znanej ze statycznej struktury danych, tablicy.

Drugi wariant, to pobranie tym razem określonego fragmentu łańcucha, czyli pewnej części 2️⃣!

JAK POBRAĆ FRAGMENT ŁAŃCUCHA ZNAKÓW W JĘZYKU PYTHON?

Pobieranie fragmentu łańcucha znaków w Pythonie, wykonujemy używając bardzo nietypowego zapisu w postaci zakresu liczby znaków "od do" umieszczonego w nawiasach kwadratowych 😳! W tym języku nazywa się to "slicing" 🔪. Jest to kolejna operacja niewystępująca w żadnym innym języku (a przynajmniej w zdecydowanej większości) 🚀! "Przycinanie" polega na użyciu notacji tablicowej i określeniu od którego indeksu do którego, łańcuch ma zostać zachowany lub "ucięty", w zależności od zapisu 😮.

Od razu pokażę Ci przykład, bo wiem, że to można ciężko zrozumieć po jednym zdaniu 😅!

POBIERANIE TRZECH PIERWSZYCH ZNAKÓW Z ŁAŃCUCHA

Oto prościutki przykład 👇:

print(my_string[0:3])

Ten zapis spowoduje pobranie 3 pierwszych znaków 🔥.

Tutaj działa zasada "exclusive end", czyli indeks podany jako górna granica (3) nie jest brany pod uwagę we fragmencie łańcucha (czyli zakres będzie od 0 do 2) 😱! Porównując do zapisu matematycznego określającego przedział liczbowy, po lewej stronie mielibyśmy nawias ostry (minimum "wchodzi w skład" przedziału), a po prawej okrągły (maksimum "nie wchodzi w skład" przedziału") 📖.

Jeżeli nie definiujemy przedziału od lewej strony innego niż zero (pierwszy element), możemy pominąć pierwszą liczbę 👇:

print(my_string[:3])

Zapis jest równoważny do poprzedniego, tylko nieco krótszy 😅!

W ten sam sposób możemy pobierać łańcuch w drugą stronę - poprzez "wycięcie" pewnych znaków ✂️.

POBIERANIE "WYCIĘTEGO" ŁAŃCUCHA BEZ PIERWSZYCH 5 ZNAKÓW

Na przykład może interesować nas wykluczenie 5 pierwszych znaków. Wtedy możemy zapisać tak 👇:

print(my_string[5:])

Od strony indeksów, zostaną wycięte znaki w przedziale <0; 5) 💥. Czyli od szóstego znaku (o indeksie równym 5 ⚠️) łańcuch bierzemy już pod uwagę 👍.

Gdybyś był(a) ciekawy(-a), pełna postać powyższego skróconego zapisu jest następująca 👇:

print(my_string[5:len(my_string)])

"len" pobiera liczbę elementów sekwencji ℹ️. Tak jak pisałem przedział nie uwzględnia maksymalnej wartości, stąd nie wykonujemy odejmowania o 1 element do tyłu, aby "dopasować się" do notacji indeksowej 💡.

POBIERANIE "WYCIĘTEGO" ŁAŃCUCHA ZE ŚRODKA

Przypadek trzeci 3️⃣: chcemy otrzymać "wycinek" łańcucha nie z początku, nie z końca, a ze środka 💥! Wtedy jak się domyślasz, musimy wpisać wartości liczbowe dla obu krańców przedziału, aby doprecyzować o jaki wycinek nam chodzi.

Załóżmy, że z łańcucha chcemy wydobyć słowo "łańcuch" 😊. No to musimy zapisać tak 👇:

print(my_string[4:11])

Przywołam przykładowy łańcuch, aby było lepiej wyjaśniać co się dzieje 👇:

"Mój łańcuch znaków"

Słowo "łańcuch" zaczyna się od czwartego indeksu, czyli od piątego znaku 💡. To jest słowo siedmioliterowe, zatem wystarczy dodać 7 do wartości początkowego indeksu, tak aby otrzymać koniec przedziału 👍. W taki sam sposób możesz wyznaczyć dowolny "wycinek" łańcucha i wcale to nie musi być słowo ℹ️. To może być dowolny wycinek!

Ciekawostka jest taka, że jeżeli przedział jest sprzeczny, czyli indeks pierwszego znaku do pobrania jest większy od ostatniego 👇:

print(my_string[11:4])

na wyjściu otrzymasz pusty łańcuch, bez żadnych znaków 🙂! Co więcej, nie dojdzie do żadnej awarii programu (zgłoszenia wyjątku), co zapewnia bezpieczeństwo podczas eksperymentowania 🤩! To pokazuje "wyrozumiałość" Pythona, bo w innych językach programowania doszłoby do zgłoszenia wyjątku albo wyrzucenia programu, a tutaj po prostu nie wyświetli się nic.

Warto jeszcze sobie wyjaśnić co się stanie jak wyjdziesz poza zakres łańcucha 😳!

POBIERANIE "WYCIĘTEGO" ŁAŃCUCHA WYCHODZĄC POZA ZAKRES INDEKSÓW

Używając metody "slicing", nie musimy się martwić o błędy spowodowane wyjściem poza łańcuch 😄! Jeżeli na przykład napiszemy przedział w ten sposób 👇:

print(my_string[:99])

to na wyjściu otrzymamy taki sam łańcuch 😱! Fraza "Mój łańcuch znaków" liczy sobie jedynie 18 znaków, więc w przypadku przekroczenia po prostu uwzględni tyle, ile posiada łańcuch ✅. Różnica jest taka, że w przypadku przekroczenia tego zakresu poprzez "slicing", nie dochodzi do zgłoszenia wyjątku, tak jak to ma miejsce przy pobieraniu pojedynczych znaków 👍.

To ostatni podpunkt dotyczący podstawowej wiedzy z korzystania z metody "slicing" do uzyskiwania "przyciętych" łańcuchów ✔️. Dla głodnych wiedzy początkujących programistów Pythona mam coś jeszcze: ujemne zakresy 😮!

POBIERANIE "WYCIĘTEGO" ŁAŃCUCHA Z UŻYCIEM UJEMNYCH ZAKRESÓW

"Wycinanie" łańcuchów w Pythonie możesz wykonać również przy użyciu zakresów ujemnych 💥! Zakres ujemny oznacza "przechodzenie po znakach" łańcucha od końca, zamiast od początku 💡. Nie ma ograniczeń co do pisania przedziału znaków jakie nas interesują - możemy zdefiniować tylko początek, tylko koniec bądź początek i koniec, tak jak przy zakresie dodatnim 🚀!

Oto przykład ze zdefiniowaniem jedynie końca przedziału 👇:

print(my_string[:-3])

Otrzymasz na wyjściu ten sam łańcuch...bez trzech znaków na końcu 😅! To oznacza, że poniższy zapis 👇:

print(my_string[:-1])

spowoduje wykluczenie "wycinka" z końca łańcucha o długości jednego znaku 😉!

A teraz popatrzmy co się stanie przy zdefiniowaniu tylko początku przedziału 👇:

print(my_string[-5:])

Na wyjściu pojawią się tylko 5 ostatnich znaków z łańcucha 💥!  Czyli widać, że ujemny zakres polega na poruszaniu się po elementach w odwrotną stronę ↩️. Gdy -1 jest początkiem przedziału, to otrzymujesz jedyny znak od końca. Gdy -1 jest końcem przedziału, wtedy ten jedyny znak zostaje "wycięty" 😊.

Ostatni przykład, to zdefiniowanie przedziału i na początku, i na końcu. Dajmy na to, że znowu interesuje nas samo słowo "łańcuch". To nam zapewni poniższy zapis 👇:

print(my_string[-14:-7])

Celem wyznaczenia początku przedziału, musimy policzyć od końca ile znaków występuje przed pierwszą literą słowa "łańcuch". Nasz przykładowy łańcuch 👇:

"Mój łańcuch znaków"

składa się z 18 znaków, czyli przesunięcie od końca wynosi 14 znaków 💡. Następnie wystarczy policzyć ile liter ma słowo jakie chcemy "wyciąć" z łańcucha i tyle dodać do wartości początku przedziału, aby wyszedł koniec przedziału 😄!

Tak samo jak było przy dodatnich zakresach, w momencie wstawienia przedziału, w którym minimalna wartość przewyższa maksymalną 👇:

print(my_string[-7:-14])

nic nie otrzymamy na wyjściu ⬛. Co ważne, bez żadnych błędów 👍.

Pobieranie fragmentu łańcucha znaków w języku Python

Pobieranie fragmentu łańcucha odbywa się poprzez metodę "slicing" i skorzystaniu ze zmodyfikowanej notacji indeksowej do wyznaczania przedziału od którego indeksu do którego, mają zostać uwzględnione bądź wykluczone znaki.

Przechodzimy do wyjaśnienia "mnożenia" łańcucha ✖️!

NA CZYM POLEGA MNOŻENIE ŁAŃCUCHÓW ZNAKÓW W JĘZYKU PYTHON?

"Mnożenie" łańcucha znaków w języku Python polega na użyciu operatora mnożenia na łańcuchu, aby w ten sposób otrzymać zwielokrotnienie podanego łańcucha 😱! Na przykład poniższy kod 👇:

print('Łańcuch'*3)

spowoduje zwrócenie na wyjściu łańcucha "Łańcuch" napisanego 3 razy 😮! Wówczas przyjmie taką formę 👇:

"ŁańcuchŁańcuchŁańcuch"

Odstępy pomiędzy słowami muszą już zostać dodane ręcznie 🙂. Możesz podejść w taki sposób, że dodajesz spację jako ostatni znak łańcucha, a potem po "przemnożeniu" łańcucha stosujesz "slicing" z ujemnym zakresem po prawej stronie, aby wykluczyć ostatni znak będący spacją 👇:

print(('Łańcuch '*3)[:-1])

Aby notacja dla "przycinania" łańcucha zadziałała poprawnie, całość musi być objęta nawiasem, gdyż to jest osobne wyrażenie ⚠️!

"Mnożenie" łańcucha znaków w języku Python

"Mnożenie" łańcucha polega na "skopiowaniu" danego łańcucha określoną liczbę razy używając operatora mnożenia.

Przed nami ostatni rodzaj operacji na łańcuchach w Pythonie: porównywanie 👀!

NA CZYM POLEGA PORÓWNYWANIE ŁAŃCUCHÓW ZNAKÓW W JĘZYKU PYTHON?

W języku Python, porównywanie ze sobą łańcuchów polega na użyciu wobec nich operatorów relacyjnych i otrzymaniu rezultatu badania w postaci wartości logicznej ("bool") ☑️. O ile sprawdzenie czy jeden jest równy drugiemu jest proste do skumania 😊, tak to, na jakiej podstawie Python stwierdza, że jeden łańcuch jest "mniejszy" od drugiego, już wymaga wytłumaczenia 😳! Wówczas uwzględnia tak zwany "porządek leksykograficzny" 😱! Ujmując prostymi słowy, jest to metoda do porównywania łańcuchów znaków poprzez pobieranie liczb przypisanych do każdego znaku i badaniu która z nich jest większa, co jednoznacznie determinuje "wyższość" jednego łańcucha nad drugim 💡.

JAK PORZĄDEK LEKSYKOGRAFICZNY WPŁYWA NA PORÓWNYWANIE ŁAŃCUCHÓW ZNAKÓW W JĘZYKU PYTHON?

Każdy znak w komputerze posiada swój numer identyfikacyjny ℹ️. Na przykład mała litera 'a' posiada numer 97. Z kolei do dużej litery 'A' przypisany jest numer 65 😮! Stąd też wynik wyrażenia 👇:

print('a' > 'A')

zwróci wartość "True", gdyż 97 jest większe od 65 ✔️!

Teraz spójrzmy co się dzieje, gdy sprawdzimy czy tym razem jeden łańcuch znaków jest "większy" od drugiego 💥! Weźmy dla przykładu takie łańcuchy, które posiadają pierwszy identyczny znak 👇:

print('Aa' > 'Ab')

To zwróci wynik "False" ✔️! Duża litera 'A' występuje w obu łańcuchach w tym samym miejscu, więc są sobie równe. Jednak mamy różne znaki na drugim miejscu w kolejności! Obie literki posiadają następujące numery 👇:

  • mała litera 'a' = 97,
  • mała litera 'b' = 98.

To wyjaśnia powstanie takiego rezultatu 🧠! 97 nie jest większe od 98 i to decyduje o zwróceniu wyniku jako "fałsz" ❌.

Python w taki właśnie sposób podchodzi do porównywania łańcuchów znaków! Pobiera z każdego znaku liczbę i sprawdza po kolei czy zachodzi spełnienie warunku 🔍. A on z kolei zależy od operatora relacyjnego jaki wstawimy 😊! W sytuacji, gdy dwa znaki są sobie równe, przechodzi do kolejnego znaku w obu łańcuchach i jeżeli tym razem znajdzie różnicę, to przerywa dalsze sprawdzanie i zwraca odpowiednią wartość logiczną 💡.

Porównywanie łańcuchów znaków w języku Python

Porównywanie łańcuchów znaków w Pythonie odbywa się poprzez badanie liczby porządkowej danego znaku określającej porządek leksykograficzny i na tej podstawie język stwierdza czy dany warunek jest spełniony, czy nie.

Na sam koniec materiału warto się dowiedzieć jak możemy poznać numer jaki ma dany znak 👍!

JAK POBRAĆ LICZBĘ PORZĄDKOWĄ PRZYPISANĄ DO ZNAKU W JĘZYKU PYTHON?

W języku Python istnieje funkcja "ord" (skrót od "ordinal", czyli "porządkowy" ℹ️), której wystarczy przekazać znak 👇:

print(ord('a'))

aby zwróciła nam liczbę całkowitą (bez ułamka) oznaczającą liczbę porządkową zgodną z kodowaniem znaków Unicode (standard kodowania uwzględniający znaki diakrytyczne wszystkich krajów, w tym polskie 'ś', 'ć', 'ó' i inne) ❤️.

Pobieranie liczby porządkowej znaku w języku Python z użyciem funkcji "len"

Do wyznaczania liczby porządkowej danego znaku, stosujemy funkcję "ord" (skrót od "ordinal).

Na sam koniec przyjrzymy się paru metodom łańcuchowym 🔥! Co prawda to też można by zaliczyć do operacji na łańcuchach, aczkolwiek korzystamy z tego nieco inaczej, stąd wolałem oddzielić jedno od drugiego 🙂.

JAKIE WYSTĘPUJĄ METODY ŁAŃCUCHA ZNAKÓW W JĘZYKU PYTHON?

Łańcuch znaków w języku Python posiada bardzo dużo metod, których nie sposób opisać ich wszystkich w tym artykule ℹ️. Między innymi posiada w sobie następujące metody 👇:

  • upper,
  • isdigit,
  • startswith.

Pokażę tylko te trzy, a więcej informacji możesz znaleźć w oficjalnej dokumentacji Pythona 📖.

Najpierw podstawowa rzecz: jak skorzystać z jakiejkolwiek metody na łańcuchu 😄!

JAK SKORZYSTAĆ Z METODY ŁAŃCUCHA ZNAKÓW W JĘZYKU PYTHON?

Aby skorzystać z metody łańcucha znaków w języku Python, posługujemy się takim zapisem 👇:

'Mój łańcuch znaków'.[metoda]()

Odwołujesz się do metody poprzez znak kropki, zaraz po podaniu wartości bądź zmiennej 👀.

Metoda to nie to samo, co funkcja ⛔! Dostęp do metody uzyskujemy poprzez wartość, a nie poprzez wywołanie funkcji i podanie wartości jako parametru 😱! Dlatego określamy to "metodą", gdyż jest to funkcja "wpisana" do określonego typu danych (nie można z niej skorzystać z innego typu danych, chyba że udostępnia taką o takiej samej nazwie ℹ️) ⚠️!

PRZYKŁADY UŻYCIA METOD ŁAŃCUCHA ZNAKÓW W JĘZYKU PYTHON

Teraz zaprezentuję te 3 wspomniane metody 😊. Będę przedstawiał przykłady na poniższym łańcuchu znaków 👇:

my_string = 'Mój łańcuch znaków'

Zaczynamy!

UPPER

Metoda "upper" zamienia wszystkie litery na duże litery (tzw. "majuskuły" ℹ️). Użycie wygląda w ten sposób 👇:

print(my_string.upper())

a efekt będzie taki 👇:

'MÓJ ŁAŃCUCH ZNAKÓW'

W Pythonie jest o tyle fajnie, że nie ma problemów z polskimi znakami ✅. Aczkolwiek gdy kiedykolwiek będziesz korzystać z zamiany liter na duże (albo odwrotnie) w jakimkolwiek innym języku, możesz mieć problemy z takimi znakami, także warto abyś już teraz miał(a) tego świadomość ⚠️.

ISDIGIT

Metoda "isdigit" sprawdza czy łańcuch składa się wyłącznie z samych cyfr i wynik swojego badania zwraca w postaci wartości logicznej ("bool") ℹ️. To jest przykład użycia 👇:

print(my_string.isdigit())

Łańcuch naturalnie nie reprezentuje liczby, więc wynik będzie w postaci wartości "False" ✔️.

STARTSWITH

Metoda "startswith" przyjmuje parametr w postaci innego łańcucha i szuka czy zawiera się on w tym łańcuchu, z którego wywołujemy metodę 🔍. Tak wygląda przykład 👇:

print(my_string.startswith('Mój'))

Słowo "Mój" jak najbardziej jest częścią przykładowego łańcucha, więc wynik będzie w postaci wartości "True" ✔️.


Koniec materiału o łańcuchach znaków w języku Python 🚩. Zdaję sobie sprawę, że na samym początku będzie trudno przyswoić sobie całą tę wiedzę, jednak z czasem jak nabierzesz wprawy w programowaniu i popiszesz kod przez dłuższy czas, to będziesz pisać takie rzeczy niemal automatycznie ⏩. Trzeba znać te sposoby operowania na łańcuchach, gdyż są bardzo wygodne i stanowią "wizytówkę" tego języka 💥.

PODOBNE ARTYKUŁY