Naszym celem jest policzenie częstości występowania trzech kolejnych słów. Żeby takie trójki słów policzyć, trzeba je ze tekstu wydobyć. Zacznijmy od wyciągnięcia pojedynczych słów.
Przykład danych tekstowych z poprzedniej części zawiera 11 słów („To wszystko, co chcę opisać, zaczęło się w pierwszych dniach stycznia.”). Można by się pokusić o przypisanie każdego słowa do osobnej zmiennej, a potem połączeniu 3 zmiennych w kolejną, już składającą się z 3 słów, ale to nie jest dobre podejście. Wyobraźcie sobie tekst, który ma 10 000 słów! Dodajmy zatem do naszej wiedzy kolejny typ danych, listę. Listę umieszczasz między kwadratowymi nawiasami „[]„, a każdy element listy oddzielany jest przecinkiem. Jedna lista może zawierać dane typu tekstowego, liczbowego itd., dlatego nie zapomnij o cudzysłowie gdy podajesz dane tekstowe. Przykładem listy może być spis seriali do obejrzenia:["Wataha", "Wiedźmin", "Narcos"]. Napiszmy program, w którym zadeklarujemy zmienną o nazwie seriale z wartościami z poprzedniego zdania. Następnie sprawdźmy działania funkcji print(), type() i len() na naszej liście:
seriale = ['Wataha', 'Wiedźmin', 'Narcos']
print(seriale)
print(type(seriale))
print(len(seriale))
===================== RESTART: F:/python38/zmienna lista.py ====================
['Wataha', 'Wiedźmin', 'Narcos']
<class 'list'>
3
>>>
Funkcja print() wydrukowała wszystkie elementy listy zaznaczając pojedynczym cudzysłowem, że każdy jest tekstem:['Wataha', 'Wiedźmin', 'Narcos']
funkcja type() potwierdziła, że mamy do czynienia z listą:<class 'list'>
natomiast funkcja len() nie podała długości znaków, ale liczbę elementów listy. Trzy wartości oddzielone przecinkiem, trzy seriale, trzy elementy:3
Elementy listy można łatwo połączyć w string za pomocą funkcji separator .join(). Separatorem może być dowolny string. Przetestuj takie przykłady:
seriale = ['Wataha', 'Wiedźmin', 'Narcos']
wszystkie_seriale = " ".join(seriale)
print("String rozdzielany spacjami:")
print(wszystkie_seriale)
wszystkie_seriale = "-".join(seriale)
print("\nString rozdzielany minusami:")
print(wszystkie_seriale)
wszystkie_seriale = "_".join(seriale)
print("\nString rozdzielany podkreślnikami:")
print(wszystkie_seriale)
I popatrz na efekt:
===================== RESTART: F:/python38/zmienna lista.py ====================
String rozdzielany spacjami:
Wataha Wiedźmin Narcos
String rozdzielany minusami:
Wataha-Wiedźmin-Narcos
String rozdzielany podkreślnikami:
Wataha_Wiedźmin_Narcos
>>>
Wydarzyło się tu kilka rzeczy.
Po pierwsze, jeśli pod zmienną o tej samej nazwie po raz kolejny podstawiasz wartość, to nadpisuje ona poprzednią wartość dla tej zmiennej. W programie mamy jedną zmienną „wszystkie_seriale”. Za pierwszym razem, w 3 linijce podstawiasz pod nią efekt działania funkcji .join(), która łączy elementy listy w tekst rozdzielany spacjami, i tekst jest drukowany. Za drugim razem, w 6 linijce zmieniasz zdanie i pod tą samą zmienną „wszystkie_seriale” podstawiasz tekst rozdzielany minusami. Za trzecim razem, w 9 linijce, są to podkreślniki. Trzy razy drukujesz tą samą zmienną i za każdym razem dostajesz inny wynik.
Po drugie w 7 i 10 linijce na początku stringa do wydrukowania pojawia się \n. Pewnie zastanawiasz się czemu \n się nie pokazuje w efektach działania programu. Backshlash (po polsku ukośnik wsteczny) ma specjalne znaczenie dla danych typu string. Backshlash to tak zwany escape character (po polsku znak modyfikacji lub ucieczki) i w połączeniu z literą ma specjalne znaczenie. Kilka przydatnych przykładów przetestujemy w praktyce:
- \n – nowa linia
- \t – tabulacja
- \’ – pojedynczy cudzysłów
- \” – podwójny cudzysłów
- \\ – backslash
nowa_linia = "Jak zacząć pisanie od\n nowej linijki?"
tabulacja = "Chcę mieć ostatnie słowo po znaku\t tabulacji!"
pojedynczy_cudzyslow = 'Przecież string może być między \'\'.'
podwojny_cudzyslow = "Jak napisać coś w \"cudzysłowie\"?"
backslash = "Pliki znajdują się w katalogu C:\\python\\pliki\\"
print(nowa_linia)
print(tabulacja)
print(pojedynczy_cudzyslow)
print(podwojny_cudzyslow)
print(backslash)
I obejrzyjmy efekt:
======================== RESTART: F:/python38/wpis 4.py ========================
Jak zacząć pisanie od
nowej linijki?
Chcę mieć ostatnie słowo po znaku tabulacji!
Przecież string może być między ''.
Jak napisać coś w "cudzysłowie"?
Pliki znajdują się w katalogu C:\python\pliki\
>>>
Podsumowanie
Umiesz już tworzyć listy, łączyć elementy listy w string i wstawiać między te elementy dowolny znak. Wiesz też jak w string wstawić znaki, które dla Pythona mają wiele znaczeń – „, ’, \. W następnym rozdziale zajmiesz się dzieleniem tekstu i zapisaniem go w postaci listy.
Zadanie domowe
Podążanie za instrukcjami, nawet jeśli je wszystkie wykonujesz samodzielnie, nie zrobi z ciebie programisty. Zadania domowe mogą wydawać się na początku trudne. Tu nie ma rozwiązania podanego na talerzu, użyj dowolnych źródeł, by znaleźć odpowiedź.
- Jak pisałem na początku tego rozdziału, lista może składać się z różnego typu danych, a czy może składać się z innych list? Spróbuj przygotować listę, w której znajdzie się liczba, string, i lista trzech pierwszych liter alfabetu. Jaka będzie długość listy?
- Do listy można dodać kolejny element za pomocą metody. Dla ułatwienia przyjmijmy, że metoda pojawia się po zmiennej i zaczyna się od kropki. Np. jeśli zmienna nazywa się zadanie_domowe, metoda nazywa się przykladowa_metoda(), to by użyć metody na zmiennej napiszesz
zadanie_domowe.przykladowa_metoda(). Stwórz dowolną listę, za pomocą odpowiedniej metody dodaj do niej kolejny element, wydrukuj listę, sprawdź jej długość. Czy za pomocą wybranej metody możesz dodać string, liczbę i listę?