2022-11-13

Myśląc o Pythonie: Testowanie stringów

Jeszcze jednym, dość ważnym, tematem przy stringach, jest "testowanie string" pod kątem różnych właściwości. Takie stringi to często dane pochodzące z zewnątrz. Dane wprowadzone do jakiegoś formularza. Dane z bazy. Dane z jakiegoś zewnętrznego zasobu, np. z pliku. Bardzo często takie dane są sprawdzane na wszelkie sposoby. Jest wykonywana tzw. walidacja, zanim cokolwiek więcej z nimi zrobimy. Python też pod tym względem oferuje bardzo szeroki możliwości. Wstępnie sobie zademonstrujemy pewne rzeczy.

Zróbmy sobie zmienną o nazwie s, której zawartością będzie napis 'Witaj'

Utworzenie zmiennej napisowej.

Możemy sobie zastosować teraz na tej zmiennej różne metody, po kropce podajemy nazwę metody jaką chcemy zastosować, przykładowo islower. Jest to metoda sprawdzająca, czy string rozpoczyna się od małej litery.

Zastosowanie metody islower na stringu.

Metoda ta zwraca wartość logiczną True lub False, jak poniżej.

Taki prosty przykład testowania string pod kątem określonej właściwości. Oczywiście możemy też testować pod kątem innych właściwości np. czy string składa się wyłącznie z liter, sprawdzimy to metodą isalpha, jak poniżej.

Sprawdzanie czy string składa się wyłącznie z liter.

Oczywiście dodanie przykładowo jedynki do napisu, spowoduje, że isaplha zwróci nam False.

Można też użyć podobnej funkcji, ale o innym zakresie, to znaczy isalnum - sprawdza czy są to wyłącznie alfanumeryczne znaki, czyli cyfry oraz litery.

Sprawdzanie czy string zawiera tylko alfanumeryczne znaki.

Rezultatem działania powyższego kodu będzie oczywiście True, bowiem w napisie mamy tylko znaki alfanumeryczne - litery i cyfry. Jeśli dodamy inny znak, przykładowo wykrzyknik, to efekt działania będzie inny.

Mamy False, bowiem znak wykrzyknika nie jest znakiem alfanumerycznym. Co więcej, jeśli w napisie będzie biały znak, np. spacji, metoda isalnum też zwróci false - spacja nie jest znakiem alfanumerycznym.

Przykład ten jest dość praktyczny, bowiem funkcjonalność taka ma szeroki praktyczne zastosowanie. Wszelkiego rodzaju walidacja danych z zewnętrznego źródła, które powstały na skutek pewnych operacji wejścia.

Wyszukiwanie w stringach

Teraz może zajmijmy się wyszukiwaniem czegoś w napisach. Jednym słowem, chcemy sprawdzić czy w naszym napisie coś występuje. Do wyszukiwania mamy różne metody, mamy wyrażenia regularne, ale zacznijmy od czegoś prostego. Użyjmy metody find i poszukajmy litery w.

Szukanie w napisie przy użyciu metody find.

Metoda find, zwróci nam numer indeksu danego znaku w napisie, w tym wypadku zero.

Output metody find.

Co się natomiast stanie, jeśli poszukiwanego elementu nie ma w napisie?

Szukanie metodą find, litery w napisie.

Spróbujmy znaleźć literę 'h' w naszym napisie, której to litery, oczywiście w nim nie ma.

Output metody find gdy elementu nie znaleziono.

Dostaliśmy od metody warość -1, dlaczego? Wynika to po prostu z działania metody find, gdy nie znajdzie ona poszukiwanego elementu, zawsze zwróci -1.

Jeśli chodzi o np. stringi (ale nie tylko), to mamy do dyspozycji prosty, ale i przydatny, operator in. Używany by sprawdzić czy dany element występuje w jakimś zbiorze.

Wyszukiwanie elementu w napisie, z użyciem operatora in.

Szukamy po prostu literki a, w naszym stringu s. Innymi słowy zadajemy pytanie "Czy ciąg znaków 'a', znajduje się w ciągu znaków 'witaj 1'?" . I jak się można spodziewać, dostaniemy wartość logiczną True bowiem nasza poszukiwana literka jest częścią naszego napisu.

Output po sprawdzeniu czy literka znajduje się w napisie, za pomocą operatora in.

W przeciwieństwie do metody find, operator in zwróci nam wartość logiczną True lub False. Jak można się też domyślić, nie tylko w napisach ma zastosowanie nasz operator, we wszelkiego rodzaju innych strukturach też możemy sprawdzać czy jest jakiś określony element.

Można też sprawdzić od razu czy coś nie występuje w danej strukturze, poprzez dodanie not przed operatorem in.

Zaprzeczenie operatora in w języku Python.

I jak się pewnie spodziewasz, tutaj szukamy literki 'b' w naszym ciągu znaków, na który wskazuje zmienna o nazwie s. Oczywiście literki tej nie ma w naszym ciągu znaków, zatem zwrócona wartość to oczywiście True.

Output przy wyszukiwaniu elementów operatorami not in.

Innymi słowy, odpowiedź na pytanie "czy b nie znajduje się w s", to True.

Nie są to wszystkie metody, którymi możemy bawić się ze stringami, mamy jeszcze wiele innych, niektóre są na grafikach poniżej, pochodzących z bloga Flynerd.pl

From: https://www.flynerd.pl/2018/01/python-metody-typu-string.html
From: https://www.flynerd.pl/2018/01/python-metody-typu-string.html
From: https://www.flynerd.pl/2018/01/python-metody-typu-string.html

Zachęcam do testowania i zabawy powyższymi metodami. Może spróbuj zrobić jakiś program, który w zależności od tego czy wpisany tekst zawiera lub nie zawiera czegoś, ma inny efekt działania 😉

Dodaj komentarz

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram