W poprzednim rozdziale nauczyliśmy się jak napisać kod Python, wypisujący na ekranie tekst. W tym rozdziale przyjrzymy się bliżej samej zawartości tego, co wypisujemy.
Kiedy patrzysz na kod, być może zastanawiasz się:
print? (To funkcja, która drukuje wartość - pochodzi z czasów starych dalekopisów, gdy programy dosłownie się drukowało na papierze!).Cudzysłowy służą do określania wartości tekstowej. Gdy czytasz książkę, cudzysłowy określają, co dosłownie pomyślał lub powiedział bohater. Podobnie w programowaniu – oznaczają one dokładną wartość tekstową.
print i wie, że ma coś wyświetlić.".".Tekst w cudzysłowie nie zostanie zinterpretowany. Jeśli włożysz instrukcję matematyczną lub polecenie do cudzysłowu, komputer potraktuje to jako zwykły obrazek z tekstem, a nie polecenie.
Nazwa ta już się utarła i jest standardem w niemal wszystkich językach programowania. Rzadko kiedy ktoś mówi "przekaż mi tu łańcuch znaków".
W języku Python stringi można tworzyć przy użyciu cudzysłowu podwójnego ( " ) lub pojedynczego ( ' ).
Nie ma istotnych różnic między nimi. To tylko kwestia konwencji. Wielu polskich programistów preferuje podwójny, bo wydaje się bardziej naturalny z naszych książek.
Najważniejsza zasada: Cudzysłów, którym otwierasz tekst, musi go też zamykać! Nie możesz otworzyć pojedynczym, a zamknąć podwójnym.
Co jeśli chcesz wpisać w tekście cudzysłów, tak żeby komputer się nie pomylił i nie uznał go za koniec stringa? Użyj drugiego rodzaju do otoczenia tekstu!
' na początku, zignoruje każdy znak " w środku i będzie szukał kolejnego ' żeby zakończyć "kopiowanie" tekstu!
Tekst otoczony jednym cudzysłowem musi znajdować się w jednej linii kodu. Jeśli naciśniesz Enter w edytorze, Python wyrzuci błąd. Co więc zrobić?
Używamy specjalnego znaku:
. Pełni on rolę niewidzialnego "Entera".
od tabulatora (wielkiej spacji).
Jeśli tekst jest bardzo długi i wpisywanie wszędzie
byłoby irytujące, Python ma sztuczkę. Tekst możemy otoczyć trzema cudzysłowami z rzędu. Wtedy po prostu używamy entera na klawiaturze, a komputer to zapamięta!
Możemy matematycznie łączyć teksty! Znak plusa + postawiony pomiędzy dwoma stringami utworzy ich bezpośrednie połączenie.
"Witaj, "+ i stwierdza: "Będziemy to kleić"."Świecie".Skoro możemy teksty dodawać, to co się stanie, gdy spróbujemy je pomnożyć przez liczbę całkowitą? W Pythonie to legalne i bardzo przydatne!
Przeczytaj poniższy kod. Zastanów się, co dokładnie zostanie wypisane w konsoli linijka po linijce? Zwróć uwagę na spacje i rodzaje cudzysłowów.
Zastanów się przez chwilę, zanim przejdziesz do kolejnego slajdu z rozwiązaniem!
Linia 1: print('Kim jest "ona"?')
Python widzi otwierający pojedynczy apostrof '. Kopiuje wszystko dopóki nie spotka drugiego. W środku widzi "ona" i przepisuje cudzysłowy bez błędu.
Wynik: Kim jest "ona"?
Linia 2: print("Użyję " + " " + "by dodać teksty")
Zlepiane są 3 części. Pierwsza ma spację na końcu. Druga to sama spacja. Trzecia zaczyna się od 'b'. Razem tworzą dwie duże spacje.
Wynik: Użyję by dodać teksty
Linia 3: print("Tekst," + "następny," + "jeszcze jeden")
Znak + nie wstawia spacji sam z siebie, a w środku w cudzysłowach nie daliśmy żadnych odstępów!
Wynik: Tekst,następny,jeszcze jeden
Kolejnym typem wartości są liczby. W Pythonie rozróżniamy ich dwa główne rodzaje:
42, 0, -1. Od angielskiego "integer".
2.71, -3.14. Od "zmiennoprzecinkowego".
3,14 w Pythonie utworzyłby zbiór dwóch liczb: trójki i czternastki (tzw. Tuple). Dodatkowo w Pythonie liczby `int` mogą być nieskończenie wielkie – dopóki starczy Ci pamięci RAM w komputerze!
W przeciwieństwie do tekstów, liczby piszemy bez cudzysłowów. Wykorzystujemy standardowe znaki ze szkoły:
Zwykłe dzielenie / w Pythonie zawsze oddaje liczbę float, nawet jeśli wynik jest idealnie okrągły. Dlaczego? Bo w trakcie dzielenia komputer z góry przygotowuje się, że ułamek może wystąpić, więc profilaktycznie włącza tryb ułamkowy.
Oprócz tych znanych, mamy takie stworzone idealnie pod programowanie gier i algorytmów:
Podwójny ukośnik // (Dzielenie całkowite): Odcina to, co po przecinku (nie zaokrągla!).
print(10 // 3) ➔ Ile pełnych trójek mieści się w dziesiątce? Trzy. Wynik: 3.
Znak procenta % (Modulo - Reszta z dzielenia): Pokazuje, co zostało po pełnym podziale.
print(10 % 3) ➔ Trójka mieści się 3 razy (to daje 9). Zostaje 1 reszty. Wynik: 1.
To ulubiony operator programistów, np. do sprawdzania, czy liczba jest parzysta (`x % 2 == 0`).
Podwójna gwiazdka ** (Potęgowanie): Zamiast szkolnego znaczka ^.
print(3 ** 2) ➔ Trzy do kwadratu. Wynik: 9.
Pythona można używać jako niezawodny kalkulator. Pamięta on z matematyki kolejność wykonywania działań.
()***, /, //, %+, -Co się stanie, kiedy połączymy w działaniu liczbę całkowitą (int) oraz liczbę rzeczywistą ułamkową (float)? Zobaczmy analizę:
int = 5.float = 2.5.5.0 + 2.5.Morał: Jeśli w równaniu znajduje się chociaż jeden float, to cały wynik również stanie się ułamkiem typu float!
Oprócz tekstów i liczb istnieje trzecia kategoria, niezbędna do sterowania komputerem: wartości logiczne (bool).
bool to cześć dla George'a Boole'a, twórcy algebry, w której 1 to prawda, a 0 to fałsz. W Pythonie zresztą True pod spodem jest po prostu jedynką, a False to zero.
Wartości logiczne same z siebie rzadko są wpisywane w kod z palca. One zazwyczaj są wynikiem porównania, czyli odpowiedzią komputera na nasze pytanie.
Do sprawdzenia czy dwie rzeczy są identyczne, używamy znaków ==.
print(10 == 10)
== zadaje pytanie: "Czy są takie same?".print).= (pojedynczy) to znak "przypisania", np. "Zmień punktację w grze na 5".== (podwójny) to "znak zapytania", np. "Czy punktacja wynosi 5?".
W programowaniu znak wykrzyknika ! oznacza "zaprzeczenie" lub NIE. Zatem != pytamy: "Czy te wartości są od siebie RÓŻNE?".
<> by zapisać "różne od". Jednak współczesne standardy poszły niemal w całości w format z wykrzyknikiem: !=.
Python najpierw liczy matematykę (po obu stronach operatora porównania), a dopiero na końcu sprawdza, czy warunek się zgadza!
print(1 < 2 < 3) jest całkowicie poprawny w Pythonie i natychmiast zwróci True. Inne języki wygenerowałyby tu złośliwy błąd.
Użyj trybu interaktywnego (REPL), aby ustalić wyniki:
1 * 2 + 3 * 4 + 5 * 6 + 7 * 8 + 91 * (2 + 3) * (4 + 5) * (6 + 7) * (8 + 9)2 ** 10 (Więcej czy mniej niż 1000?)Zgadnij bez Pythona, co zwróci ten kod. Potem wpisz go, żeby sprawdzić!
"Pies" == "pies"10 != 10.03 ** 2 >= 9"Pies" == "pies"
Odpowiedź to: False. Dlaczego? Bo dla komputera wielka litera 'P' i mała litera 'p' to zupełnie inne znaki (mają inne numery w tabeli znaków)! Python wielkość liter traktuje bardzo poważnie.
10 != 10.0
Odpowiedź to: False. Znak `!=` pyta czy się różnią. A przecież wartość ułamka z zerem to matematycznie dziesięć. Więc są sobie RÓWNE (False, że są różne).
3 ** 2 >= 9
Odpowiedź to: True. Najpierw robi potęgę (3 do kwadratu to 9). Potem sprawdza: czy 9 jest większe LUB równe 9. Skoro równe się zgadza, zwraca True.
Gdy masz wątpliwości, Python może sam sprawdzić jaki to typ wartości, używając wbudowanej funkcji type(). Spójrzmy jak ona bada wartość:
Słowo class można na razie czytać po prostu jako "klasa / kategoria".
Zdobyliśmy dziś nowe "narzędzia" do naszej programistycznej skrzynki, a w zasadzie cztery podstawowe typy danych. Przypomnijmy je:
| Nazwa Polska | Nazwa (Klasa w Pythonie) | Przykład w kodzie |
|---|---|---|
| Tekst (String) | str | "Witaj, świecie", 'Pies' |
| Liczba Całkowita | int | 42, -15 |
| Liczba Rzeczywista | float | 3.14, 0.0 |
| Wartość Logiczna | bool | True, False |
Mając te klocki, możemy zacząć używać Zmiennych w następnym rozdziale! 🚀