🧩 Podstawowe wartości

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.

print("Witaj, Świecie")   # Wypisuje: Witaj, Świecie

Kiedy patrzysz na kod, być może zastanawiasz się:

Teraz pomówmy o samej wartości "Witaj, Świecie". Czym ona jest dla komputera i jakie inne wartości potrafi on zrozumieć?

📝 Teksty (Stringi)

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ą.

Jak działa to pod maską?
  1. Komputer widzi słowo print i wie, że ma coś wyświetlić.
  2. Następnie widzi otwarty cudzysłów ".
  3. Przechodzi w tryb "kopiuj wklej" i czyta znak po znaku (W, i, t, a, j...).
  4. Zatrzymuje się, gdy zobaczy zamknięcie cudzysłowu ".
  5. Ostatecznie wysyła cały zebrany w ten sposób pakiet do wypisania!

🧐 Kod czy Tekst?

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.

print(10 + 5)                    # Komputer to obliczy. Wynik: 15

print("10 + 5")                  # Komputer to tylko przekopiuje. Wynik: 10 + 5

print("print(10)")               # Wynik: print(10)
Wartości tekstowe nazywane są stringami. Wzięło się to od angielskiego słowa string, oznaczającego sznur. Trochę przypominają sznur znaków nawleczonych na nić: mogą mieć rozmaite długości, można je łączyć lub wycinać z nich koraliki (litery).

🧵 Stringi – nazewnictwo

Językoznawcy chcą, byśmy używali słowa "ciąg znaków".
👩‍🏫
Ale programiści i tak zwykle mówią "stringi"! 😁
🧑‍💻

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".

Gdybyśmy wszystko tłumaczyli, musielibyśmy mówić "zmiennoprzecinkowa jednostka arytmetyczno-logiczna" zamiast po prostu "float" w obliczeniach! Pozostańmy więc przy profesjonalnym żargonie.

" " vs ' ' (Rodzaje Cudzysłowów)

W języku Python stringi można tworzyć przy użyciu cudzysłowu podwójnego ( " ) lub pojedynczego ( ' ).

# Cudzysłów podwójny:
print("Witaj, Świecie")

# Cudzysłów pojedynczy (apostrof):
print('Witaj, Świecie')

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.

🪆 Cudzysłów w cudzysłowie

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!

# Chcemy użyć apostrofu wewnątrz słowa "Let's":
print("Let's play")                 # Zamykamy wszystko w podwójnym!

# Chcemy zacytować słowo "Hej":
print('Powiedział "Hej" wczoraj')  # Zamykamy w pojedynczym!
Gdy Python widzi ' na początku, zignoruje każdy znak " w środku i będzie szukał kolejnego ' żeby zakończyć "kopiowanie" tekstu!

↵ Enter w stringu ( )

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".

text = "Pierwsza linia, Druga linia"
print(text)
Zauważ ukośnik w lewo (tzw. backslash). To tzw. znak ucieczki (escape character). Mówi on Pythonowi: "Następny znak po mnie nie jest zwykłą literą, to tajna komenda!". Litera n pochodzi od newline. Istnieje też od tabulatora (wielkiej spacji).

📜 Potrójne cudzysłowy

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!

# Taki kod w edytorze zadziała bez błędu!
dlugi_tekst = '''Oda do kodu,
który nigdy nie ma
żadnych błędów.'''

print(dlugi_tekst)
Są to tak zwane bloki wielolinijkowe. Profesjonaliści często używają ich jako tzw. docstrings (stringi dokumentacyjne) - dużych komentarzy na początku programu, by opisać co dokładnie on robi!

➕ Dodawanie tekstów (Konkatenacja)

Możemy matematycznie łączyć teksty! Znak plusa + postawiony pomiędzy dwoma stringami utworzy ich bezpośrednie połączenie.

print("Witaj, " + "Świecie")
# Wynik: Witaj, Świecie
Analiza działania:
  1. Python czyta "Witaj, "
  2. Zauważa znak + i stwierdza: "Będziemy to kleić".
  3. Czyta drugi element "Świecie".
  4. Zlepi je idealnie krawędź w krawędź. Upewnij się, że dodałeś spację w środku stringa przed plusem, inaczej połączą się jak: "Witaj,Świecie"!

✖️ Mnożenie tekstów (Magia Pythona)

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!

print("Ha! " * 3)
# Wynik: Ha! Ha! Ha!

print("=" * 20)
# Wynik: ====================
Ta funkcja rzadko występuje w innych językach programowania, takich jak C++ czy Java. W Pythonie jest niezwykle przydatna, na przykład gdy chcemy narysować ładną linię z myślników (-----) by oddzielić od siebie fragmenty programu w konsoli!

🎯 Ćwiczenie: Stringi (Zadanie)

+100 XP

Zadanie do przemyślenia

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.

print('Kim jest "ona"?')
print("Użyję " + " " + "by dodać teksty")
print("Tekst," + "następny," + "jeszcze jeden")

Zastanów się przez chwilę, zanim przejdziesz do kolejnego slajdu z rozwiązaniem!

✅ Rozwiązanie i analiza krok po kroku

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

🔢 Liczby: Całkowite i Rzeczywiste

Kolejnym typem wartości są liczby. W Pythonie rozróżniamy ich dwa główne rodzaje:

Liczby całkowite (int)
Nie posiadają ułamka. Np. 42, 0, -1. Od angielskiego "integer".
Liczby rzeczywiste (float)
Posiadają część dziesiętną. Np. 2.71, -3.14. Od "zmiennoprzecinkowego".
print(42)             # Całkowita
print(2.71)           # Dziesiętna (kropka!)
Zauważ, że część dziesiętna zapisywana jest po kropce! Zapis 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!

🧮 Podstawowe operacje matematyczne

W przeciwieństwie do tekstów, liczby piszemy bez cudzysłowów. Wykorzystujemy standardowe znaki ze szkoły:

# Dodawanie i Odejmowanie
print(3 + 2)     # 5
print(10 - 8)    # 2

# Mnożenie to gwiazdka!
print(3 * 2)     # 6

# Dzielenie (zawsze daje float)
print(10 / 4)    # 2.5
print(10 / 2)    # 5.0 (nie 5!)

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.

🧮 Specjalne operatory: //, %, **

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.

🧑‍🔬 Kolejność działań

Pythona można używać jako niezawodny kalkulator. Pamięta on z matematyki kolejność wykonywania działań.

print(1 + 2 * 3)         # Wynik: 7 (mnożenie było pierwsze)

print((1 + 2) * 3)       # Wynik: 9 (nawias wymusza pierwszeństwo)
Hierarchia Pythona:
  1. Nawiasy okrągłe ()
  2. Potęgowanie **
  3. Mnożenie, Dzielenie, Modulo *, /, //, %
  4. Dodawanie, Odejmowanie +, -

🧬 Zarażanie Float'em (int + float)

Co się stanie, kiedy połączymy w działaniu liczbę całkowitą (int) oraz liczbę rzeczywistą ułamkową (float)? Zobaczmy analizę:

print(5 + 2.5)
  1. Komputer widzi int = 5.
  2. Komputer widzi float = 2.5.
  3. Komputer musi je zrównać, więc chwilowo w tle zamienia '5' na '5.0' (zmienia int na float).
  4. Dodaje 5.0 + 2.5.
  5. Wypisuje wynik jako float: 7.5.

Morał: Jeśli w równaniu znajduje się chociaż jeden float, to cały wynik również stanie się ułamkiem typu float!

⚖️ Wartości logiczne (Prawda / Fałsz)

Oprócz tekstów i liczb istnieje trzecia kategoria, niezbędna do sterowania komputerem: wartości logiczne (bool).

True
Prawda matematyczna.
False
Fałsz matematyczny.
print(True)
print(False)
Typ 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.

🔍 Tworzenie logiki: Równość (==)

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 ==.

Jak myśli Python w kodzie: print(10 == 10)
  1. Bierze lewą stronę: dziesiątka.
  2. Bierze prawą stronę: dziesiątka.
  3. Znak == zadaje pytanie: "Czy są takie same?".
  4. Zwraca odpowiedź True (i to wypisuje print).
Znak = (pojedynczy) to znak "przypisania", np. "Zmień punktację w grze na 5".
Znak == (podwójny) to "znak zapytania", np. "Czy punktacja wynosi 5?".

🚫 Nierówność (!=) i Wielkość (>, <)

W programowaniu znak wykrzyknika ! oznacza "zaprzeczenie" lub NIE. Zatem != pytamy: "Czy te wartości są od siebie RÓŻNE?".

# Czy 5 różni się od 5?
print(5 != 5)       # False

# Czy 5 różni się od 6?
print(5 != 6)       # True
# Znaki ostrokątne: > < >= <=
print(10 > 5)       # True

print(5 >= 5)       # True (bo równe)
Niektóre starsze języki (np. stare bazy danych) używają znaków <> by zapisać "różne od". Jednak współczesne standardy poszły niemal w całości w format z wykrzyknikiem: !=.

🧩 Łączenie działań i porównań

Python najpierw liczy matematykę (po obu stronach operatora porównania), a dopiero na końcu sprawdza, czy warunek się zgadza!

# 1. Liczy: 1 + 2 = 3
# 2. Sprawdza: 3 == 3 ?
print(1 + 2 == 3)          # Wynik: True
Python w odróżnieniu od wielu innych języków pozwala na... matematyczne łańcuchy (tak jak robiliście to na lekcjach w zeszycie)!

Kod 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.

🎯 Ćwiczenia (Czas wbić level!)

+200 XP

Kalkulator

Użyj trybu interaktywnego (REPL), aby ustalić wyniki:

  1. 1 * 2 + 3 * 4 + 5 * 6 + 7 * 8 + 9
  2. 1 * (2 + 3) * (4 + 5) * (6 + 7) * (8 + 9)
  3. 2 ** 10 (Więcej czy mniej niż 1000?)
+150 XP

Potyczka logiki

Zgadnij bez Pythona, co zwróci ten kod. Potem wpisz go, żeby sprawdzić!

  • "Pies" == "pies"
  • 10 != 10.0
  • 3 ** 2 >= 9

✅ Odpowiedzi (Potyczka logiki)

"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.

🧬 Funkcja type(): Czym ja jestem?

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ść:

# Podajemy do 'type' cyfrę 10. Oddaje nam odpowiedź. A 'print' ją wyświetla na ekranie.
print(type(10))                 # <class 'int'>

print(type(3.14))               # <class 'float'>

print(type(True))               # <class 'bool'>

Słowo class można na razie czytać po prostu jako "klasa / kategoria".

🏆 Podsumowanie Lekcji: Ekwiwalentny Arsenał

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! 🚀