Python dla inżynierów

Python dla inżynierów: #2 Napisy (Strings)

W drugiej lekcji „Python dla inżynierów” nauczę Cię jak tworzyć napisy w Pythonie i jak operować na nich. Potrafisz już co prawda pisać proste procedury obliczeniowe, ale jak wykorzystać wyniki z Pythona do Twoich projektów? „Gołe” wyniki nie przydadzą się na wiele. Jak zatem pokazać wyniki tych obliczeń? Jak wprowadzić do algorytmów Pythona napisy i jak je później wyświetlić? Tego nauczysz się z tej lekcji!

Aby wykorzystać w projekcie stworzone przez Ciebie w Pythonie algorytmy obliczeniowe, potrzebujesz odpowiednio sformatowanego tekstu, który będziesz mógł dowolnie zmieniać i następnie wklejać tam gdzie chcesz. Nauczę Cię jak radzić sobie z napisami w Pythonie, ponieważ jest to bardzo przydatne! Nauczę Cię też jak tworzyć własne raporty obliczeniowe do wykorzystania bezpośrednio w Twoich obliczeniach statycznych.

Dzisiaj nauczę Cię następujących operacji na napisach (ang. strings):

  1. Tworzenie napisów
  2. Wyświetlanie napisów
  3. Podstawowe operacje na napisach
  4. Właściwości napisów
  5. Metody wbudowane napisów
  6. Formatowanie napisów
  7. Przykład zastosowania napisów: Raport z obliczeń

1. Tworzenie napisów

Napisy w Pythonie to ciąg znaków, które służą do przechowywania informacji (danych) tekstowych. Ciąg ten ma ściśle określoną kolejność znaków (sekwencja znaków). Np. napis tekst Python widzi jako zbiór liter o konkretnej kolejności. Sekwencyjność w Pythonie ma duże znaczenie – powiem o tym więcej za chwilę.

Bardzo często ciągi znaków w Pythonie określa się zamiennie jako napis, string (wersja angielska) lub łańcuch znaków. W tej lekcji będę używać zamienne tych nazw.

Napisy (Strings) w Pythonie definiuje się za pomocą apostrofu ' umieszczonego na początku i na końcu ciągu znaków. Może to być:

Te dwa sposoby zapisu napisów (za pomocą apostrofu '...' lub cudzysłowu "...") dają taki sam efekt końcowy. Ważne jest, aby zaczynać i kończyć napisy konsekwentnie tym samym znakiem.

Po wywołaniu tego tekstu Python zwróci błąd tego typu:

Powodem tego błędu jest to, że tym drugim apostrofem kończę mój napis, więc słowo uważać jest już poza napisem. Jeśli potrzebujesz użyć w tekście apostrofu lub cudzysłowu (np. pisząc po angielsku I'm lub cytując "kogoś"), to użyj kombinacji tych dwóch, czyli ' i " do stworzenia takiego tekstu. Przykład:

2. Wyświetlanie napisów (drukowanie)

Napisy możesz wyświetlić (wydrukować) za pomocą funkcji print(). Pamiętasz? Użyłem tej funkcji już w lekcji o liczbach.

Wywołanie tej linijki kodu zwróci nam ciąg znaków Python dla inżynierów.

Napisy są z reguły jednowierszowe. Jeśli jednak masz taką potrzebę, to możesz tworzyć napisy wielowierszowe. Tworzysz je dodając na początku i końcu ciągu znaków potrójne apostrofy '''...''' lub potrójne cudzysłowy """...""".

Wynikiem tego będzie:

Drugi sposób:

Po wywołaniu dostaniesz taki ciąg znaków:

Jeśli chcesz wyświetlić jednocześnie kilka napisów, to wystarczy je wypisać rozdzielając przecinkami:

Wynikiem będzie: a b c. Poszczególne napisy zostaną połączone i rozdzielane domyślnie pojedynczą spacją (white space).

A co jeśli chcemy sami zdecydować jaki znak będzie rozdzielał poszczególne napisy? W tym celu na końcu funkcji dodajemy separator sep='[Twój znak]':

Python wyświetli to jako:

Polskie znaki w skryptach Pythona

Interpreter Pythona przyjmuje domyślnie dla plików .py kodowanie ASCII. Jeżeli chcesz stosować polskie znaki (ą, ę, ć etc.), to powinieneś na początku kodu podać odpowiednie kodowanie. Ja zalecam kodowanie Unikod UTF-8. ASCII jest z nim w pełni kompatybilne i zawiera dodatkowo znaki specjalne wszystkich języków. Po zapisaniu pliku z tym kodowaniem należy dodać na początku pliku Pythona: #-*-coding: utf-8-*-. Ta informacja pozwala zorientować się jakie kodowanie przyjąłeś w Twoim pliku .py.

3. Podstawowe operacje na napisach

Napis jako zmienna

Wynikiem będzie abc.

Długość napisów

Przydatną funkcją w napisach jest funkcja len(). Służy ona do sprawdzenia długości łańcucha znaków:

Funkcja len() zwróci nam, że to zdanie ma 24 znaki.

Operator indeksowania

Napisy, jak wspomniałem na początku, to łańcuchy znaków o określonej kolejności. Oznacza to, że Python może używać indeksów do wywołania poszczególnych znaków lub części danego łańcucha.

Do wywołania pojedynczego znaku w danym napisie, któremu odpowiada wybrany przez nas indeks, używamy nawiasów kwadratowych [] umieszczonych zaraz za tym napisem:

Po wywołaniu tego kodu Python zwróci nam znak P.

Zwróć uwagę, że indeksowanie w Pythonie zaczyna się od liczby 0. Zatem pierwszy znak w łańcuchu ma przypisany indeks 0, drugi – 1, trzeci – 2 itd.

Wynikiem będzie:

Jeśli natomiast chcesz wyświetlić określony fragment łańcucha znaków, to operator indeksowania ma postać nazwa_zmiennej[od:do]. Przykład:

W efekcie dostaniemy:

Możesz również użyć ujemnych wartości indeksów:

Python zwróci tutaj:

Python pozwala również na wyświetlenie fragmentu łańcucha z zadanym krokiem (skok, co który znak ma być wyświetlony).

Wynikiem będzie odpowiednio:

4. Właściwości napisów

Modyfikacja napisów

Podobnie jak w innych językach (np. C#, Java) napisy w Pythonie są niemodyfikowalne (immutable), tj. po stworzeniu napisu nie można zmieniać lub zastępować w nim poszczególnych znaków. Zobaczmy to na naszym przykładzie str = 'Python dla inżynierów':

Po wywołaniu tej linii dostaniemy błąd:

Zwróć uwagę, że Python pokazuje bezpośrednio czego nie możesz zrobić – w tym wypadku nie możesz zmienić przypisania dla wybranego elementu.

Ale co możesz zrobić, to łączyć ze sobą napisy!

Łączenie napisów

Dostaniemy tutaj abc dodaj mnie.

Zauważ, że możesz też nadpisywać napisy (przypisać im nową wartość w miejsce starej). Przykład:

Wynikiem będzie abc dodaj mnie.

A co jeśli chcemy połączyć ze sobą tekst i liczbę?

Niestety, Python wyrzuci błąd:

Python nie pozwala na łączenie dwóch różnych typów obiektów jak str ('abc = ') i np. int (123). Rozwiązaniem tego problemu jest zamiana liczby na ciąg znaków za pomocą funkcji str() lub repr():

Python zwróci nam wtedy 'abc = 123'

Powielanie napisów

Python zwróci ciąg znaków abcabcabcabcabcabcabcabcabcabc.

Zauważ, że nie jest to typowe mnożenie, jak w przypadku liczb, tylko powielanie (powtórzenie). Różnica jest taka, że liczba powieleń musi być dodatnią liczbą całkowitą typu int.

Python zwróci wtedy błąd:

Python wyrzuci błąd:

Uwaga: Na pewno zwróciłeś uwagę na różnicę pomiędzy operacjami na napisach i na liczbach? Żeby rozwiać wszelkie wątpliwości weźmy dwa proste przykłady:

  • Dodawanie '2' + '2' nie da w wyniku liczby 4 tylko string '22',
  • podobnie mnożenie 4 * '2' nie da wyniku 8, tylko '2222'.

Widzisz teraz różnicę?

5. Metody wbudowane

Obiekty w Pythonie mają zwykle tzw. metody wbudowane (built-in methods). Metody, mówiąc najprościej, są to funkcje zaszyte w danym obiekcie (będę o tym mówił w kolejnych lekcjach), które mogą wykonywać polecenia na nich samych. Nie martw się jeśli nie wszystko jest tutaj zrozumiałe. Zajmiemy się tym później i nauczę Cię tworzenia własnych obiektów i funkcji.

Aby wywołać konkretną metodę trzeba po nazwie obiektu postawić kropkę . i następnie podać nazwę metody. Zasada jest taka: obiekt.metoda(parametr). Zerknij poniżej na kilka przykładów użycia metod dla stringów.

Formatowanie napisów

Dostaniemy z tego odpowiednio:

Przeszukiwanie napisów

Powyższe dwie metody zwrócą nam:

Jeśli chcemy dowiedzieć się tylko czy dany znak lub ciąg znaków występuje w łańcuchu, najlepiej wykorzystać do tego polecenie in:

W wyniku powyżej otrzymaliśmy wartości: True dla 'Python' (tak, 'Python' występuje w str) oraz False dla 'Pascal' (nie, 'Pascal' nie występuje w str).

Inne przydatne metody:

W wyniku dostaniemy:

Uwaga: Wielkość liter w Pythonie ma znaczenie! Spójrz na przykład powyżej. Dla wyrażenia str.count('p') Python zwrócił wartość 0, ponieważ w str nie występuję znak małe p.

Wynikiem będzie napis P.thon dla inż.nierów. Metoda ta pozwala na zastępowanie znaków w napisie. Jednak, jak powiedziałem wyżej, sam str pozostaje bez zmian (po wywołaniu print(str) dostaniemy niezmieniony napis).

Dzielenie / łączenie napisów

Za pomocą metody split() otrzymujemy listę znaków wydzieloną separatorem. Powstała lista nie będzie zawierać znaku separatora (odpowiednio w przykładzie: znak spacji i y).

Nie przejmuj się jeśli nie wiesz jeszcze co to listy. Omówię je w następnych lekcjach. Tutaj wspominam o nich jedynie jako wynik działania funkcji.

Wynikiem działania join() będzie:

Metody wbudowane są bardzo pomocne w szybkim operowaniu na obiektach. Nie trzeba tracić czasu na tworzenie nowych funkcji, mamy je już wbudowane. Więcej na temat metod wbudowanych w stringach możesz znaleźć tutaj.

6. Formatowanie napisów

Przechodzimy teraz do, moim zdaniem, najciekawszej części tej lekcji – formatowania napisów.

Jeśli wykonuję jakieś obliczenia za pomocą algorytmów napisanych w Pythonie, to zawsze przychodzi etap wyświetlania wyników obliczeń. A dokładnie chodzi o sensowne sformatowanie wyników, żeby można było je wykorzystać dalej.

To, co daje nam Python to to, że możemy niemal dowolnie komponować dane i wyniki wg własnych potrzeb i upodobań. Pokażę Wam kilka przydatnych opcji.

Weźmy prosty przykład.

Wynikiem będzie tekst Stolicą kraju Tanzania jest Dodoma. Populacja kraju: 53950935 mieszkańców.

Wygląda nienajgorzej, prawda? Ale można też się pogubić z tymi znakami jak + itp. I jeszcze pilnowanie tych spacji… A może by zrobić to tak:

Formatowanie napisów za pomocą %

Wynik jest identyczny: Stolicą kraju Tanzania jest Dodoma. Populacja kraju: 53950935 mieszkańców.

Prawda, że lepiej? Taki sposób odwołania do zmiennych za pomocą % jest dużo łatwiejszy, czytelniejszy i mniej podatny na błędy. Za pomocą % możemy w Pythonie odwoływać się do m.in. następujących typów obiektów:

  • %s – napis, łańcuch znaków,
  • %d – liczba całkowita,
  • %f – liczba rzeczywista, zmiennoprzecinkowa,
  • %e – liczba rzeczywista w notacji naukowej.

Dzięki odwołaniom możemy też określać dokładność wyświetlanych zmiennych. Przykład:

Wynik: Najpopularniejsze stałe matematyczne to pi = 3.14 i e = 2.718.

Formatowanie napisów za pomocą metody format()

Jest jeszcze inny sposób formatowania napisów – metoda format(). Wygląda podobnie do odwołania za pomocą % z drobnymi różnicami. Sprawdźcie sami na przykładzie ze stolicą:

Wszystkie trzy funkcje dadzą ten sam wynik: Stolicą kraju Tanzania jest Dodoma. Populacja kraju: 53950935 mieszkańców..

Więcej ciekawych przykładów z wykorzystaniem metody format() znajdziecie tutaj.

7. Przykład zastosowania stringów: Raport z obliczeń

W ostatniej lekcji nauczyłeś się programować proste procedury obliczeniowe oparte o działania arytmetyczne. Tutaj też Ci się to przyda. W tym przykładzie nauczę Cię jak wyświetlać przykładowe wyniki obliczeń, żebyś mógł wykorzystać to bezpośrednio w Twoich obliczeniach.

Napiszemy krótką procedurę do obliczania naprężeń normalnych i sformatujemy dane i wyniki tak, żeby powstał z tego raport z obliczeń. Wykorzystując print() i inne poznane funkcje możesz dowolnie formatować dane i wyniki obliczeń, które chcesz wyświetlić.

W efekcie dostaniemy następujący wydruk:

Tak przygotowaną notatkę obliczeniową możesz wykorzystać bezpośrednio wklejając ją do Twojego projektu. Metoda jest prosta i pozwala na radzenie sobie z problemami, których nie możesz ogarnąć typowym oprogramowaniem.

Sposób formatowania notatek jest oczywiście dowolny. Można je rozbudowywać, pokazywać lub ukrywać wybrane przez Ciebie informacje. Pokazałem tutaj prosty przykład, w którym wykorzystałem też inne przydatne opcje tekstu (np. rjust() – wyrównywanie do prawej). Przykład ten oczywiście nie rozwiązuje wszystkich problemów (np. jednostki SI, grafiki, zapis do PDF etc.), ale cierpliwości :) Będzie niedługo o tym więcej. Póki co eksperymentuj i zobacz jak to działa z innymi funkcjami!

Podsumowanie

A teraz krótkie podsumowanie. W tej lekcji nauczyłeś się tworzyć i wyświetlać napisy w Pythonie. Poznałeś właściwości napisów (jak len(), indeksowanie znaków etc.). Umiesz operować na napisach – łączyć je, powielać, przeszukiwać etc. Wiesz też jak formatować napisy, żeby wyglądały tak, jak tego chcesz. Potrafisz już tworzyć proste i szybkie raporty z Twoich obliczeń.

Możesz też ściągnąć spakowany plik .py z kodem, który pokazałem w tej lekcji.

Teraz spróbuj napisać własną procedurę obliczeniową i utworzyć dla niej raport z tych obliczeń. Co to będzie? Jeśli potrzebujesz pomocy – napisz mi o tym w komentarzu!

W następnym poście zajmiemy się tzw. listami!


Wpisy z cyklu „Python dla inżynierów„:

  1. Wprowadzenie do Pythona i Liczby
  2. Napisy (Strings)
  3. Listy
  4. (w opracowaniu)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *