Lista to [3, 7, 2]. Ile wynosi sum, ile max, a ile średnia?
Część 1 · Indeks i długość
Napis to ciąg znaków z numerami
Napis (typ str) to ciąg znaków ustawionych w kolejce. Każdy znak ma swój numer, czyli indeks. Liczymy od zera, jak w liście. Indeks ujemny liczy od końca.
word = "Python"
word[0] # "P"
word[5] # "n"
word[-1] # "n"
word[-2] # "o"
len(word) # 6
docs.python.org, The Python Tutorial, rozdz. 3.1.2 (Text)
Część 1 · Wycinek
Wycinek: od tego do tego
Wycinek to kawałek napisu: word[a:b] bierze znaki od indeksu a (wchodzi) do indeksu b (już nie wchodzi). Jak bieg od słupka 2 do słupka 5: mijasz słupki 2, 3 i 4, a przy piątym kończysz.
word[0:2] # "Py"
word[:2] # "Py", od początku
word[4:] # "on", do końca
word[-2:] # "on", dwa ostatnie
word[42:] # "", pusty napis
word[42] # IndexError, błąd
docs.python.org, The Python Tutorial, rozdz. 3.1.2 (Text)
Część 2 · Sklejanie i niezmienność
Plus skleja, gwiazdka powiela
name = "Ala"
name + " Nowak" # "Ala Nowak"
3 * "ab" # "ababab"
"-" * 20 # linia z 20 kresek
word = "Python"
word[0] = "J" # TypeError
"J" + word[1:] # "Jython"
Operator + na napisach skleja je w jeden, a * z liczbą powiela napis.
Napis jest niezmienny: pojedynczego znaku nie da się podmienić, jak na wydrukowanej kartce. Python zgłasza wtedy TypeError. Nowy napis budujemy ze sklejonych kawałków.
docs.python.org, The Python Tutorial, rozdz. 3.1.2 (Text) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 223 (dodatek 6, operator złączania napisów)
Część 2 · Metody napisu
Cztery polecenia po kropce
Metoda to polecenie wydane konkretnemu napisowi: piszemy je po kropce, np. text.upper(). Metoda nie zmienia napisu, tylko oddaje nowy.
Zapis
Wynik
Co robi
text.upper()
"ALA MA KOTA"
same wielkie litery
text.lower()
"ala ma kota"
same małe litery
text.count("a")
3
ile razy występuje małe „a” (duże „A” się nie liczy)
text.replace("kota", "psa")
"Ala ma psa"
oddaje kopię z podmienionym fragmentem
"kot" in text
True
czy taki fragment jest w napisie
"pies" in text
False
nie ma go, więc fałsz
Wszystko dla text = "Ala ma kota". Po replace zmienna text dalej trzyma „Ala ma kota”.
docs.python.org, Biblioteka standardowa, Text Sequence Type str (String Methods: upper, lower, count, replace) oraz Common Sequence Operations (x in s)
Część 3 · f-string
f-string: wartość wprost w zdaniu
f-string to napis z literą f przed cudzysłowem. W klamrach {} wpisujemy nazwę zmiennej albo działanie, a Python wstawia tam wynik.
name = "Ola"
age = 16
print(f"{name} ma {age} lat.")
# Ola ma 16 lat.
price = 4.5
print(f"Cena: {price:.2f} zł")
# Cena: 4.50 zł
Zapis :.2f po dwukropku to format: pokaż liczbę z dwoma miejscami po przecinku. Dlatego 4.5 wypisuje się jako 4.50, tak jak cena w sklepie.
Bez litery f Python wypisze dosłownie {name} ma {age} lat., razem z klamrami.
docs.python.org, The Python Tutorial, rozdz. 7.1.1 (Formatted String Literals)
Część 3 · Porównywanie napisów
„Ala” to nie to samo co „ala”
Znak == sprawdza, czy napisy są dokładnie takie same, znak po znaku. Wielkość liter ma znaczenie. Znaki < i > układają napisy jak w słowniku: porównują pierwszy znak, a przy remisie drugi i kolejne.
Porównanie
Wynik
Dlaczego
"Ala" == "Ala"
True
każdy znak taki sam
"Ala" == "ala"
False
pierwsza litera raz duża, raz mała
"Ala".lower() == "ala".lower()
True
obie strony sprowadzone do małych liter
"Ala" < "Ola"
True
„A” stoi w słowniku przed „O”
W praktyce: Python porządkuje znaki według numerów z tablicy Unicode, a wielkie litery mają tam mniejsze numery niż małe. Dlatego porównanie "Z" < "a" daje True, choć w alfabecie „z” jest po „a”.
docs.python.org, The Python Tutorial, rozdz. 5.8 (Comparing Sequences and Other Types)
Ćwiczenie · przy komputerze · 12 minut
Ćwiczenie: trzy małe programy
Napisz program, który pyta o imię, a potem wypisuje jego pierwszą literę, liczbę liter i całe imię wielkimi literami. Sprawdź go dla imienia Ola.
Zapisz word = "informatyka". Wypisz wycinek, który da słowo forma, potem trzy ostatnie litery, a na końcu pierwszą i ostatnią literę w jednej linii.
Napisz program, który pyta o adres e-mail i sprawdza operatorem in, czy jest w nim znak @. Wypisz „Wygląda na adres e-mail.” albo „Brakuje znaku @.”.
Wskazówka do wszystkich trzech
Uruchamiaj program po każdej dopisanej linijce, a nie dopiero na końcu. Gdy zobaczysz IndexError, sprawdź, czy nie sięgasz po znak spoza napisu: ostatni znak ma indeks len(text) - 1, a najprościej wziąć go jako text[-1].
Sprawdzenie
Trzy pytania na koniec
Jak sięgnąć po pierwszy, a jak po ostatni znak napisu?
Napis to "Python". Co da word[2:5] i dlaczego nie ma tam znaku o indeksie 5?
Czy da się podmienić pojedynczy znak zapisem word[0] = "J"?
Podsumowanie
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
"@" in email
Formularz rejestracji odrzuca adres bez małpy, zanim wyśle cokolwiek na serwer
codziennie
.lower() przed porównaniem
Logowanie działa tak samo dla Ola@firma.pl i ola@firma.pl
standard w firmach
Wycinek text[:100]
Zapowiedź artykułu na liście: pierwsze sto znaków i trzy kropki
codziennie
"*" * len(password)
Hasło i numer karty pokazane jako gwiazdki, żeby nie trafiły na zrzut ekranu