Kurs Python · Moduł 1: Podstawy Pythona

Zmienne - Ścieżki w Dżungli

7 min czytania
W tej lekcji11

Witaj ponownie! Darwin tutaj. W dzienniku polowym przybywa danych: kierunek marszu, współrzędne obozu, liczba gatunków. Tekst z print() znika zaraz po wyświetleniu, a program musi dane gdzieś odłożyć i do nich wrócić. Do tego służą zmienne.

Czym są zmienne?

Wyobraź sobie, że podczas ekspedycji znajdujesz różne przedmioty:

  • Kompas wskazujący kierunek
  • Mapa z zaznaczoną lokalizacją
  • Notatnik z liczbą odkrytych gatunków

Każdy z tych przedmiotów ma nazwę i przechowuje wartość. W Pythonie to zmienne - jak podpisane słoiki w namiocie z próbkami. Oto wpis z dziennika zapisany kodem:

1# Kompas wskazuje na północ
2direction = "North"
3
4# Mapa pokazuje współrzędne
5latitude = -3.4653
6longitude = 29.3608
7
8# Liczymy odkryte gatunki
9species_count = 47
10
11# Czy znaleźliśmy rzadki gatunek?
12rare_species_found = True

Znak = to nie równość, tylko przypisanie: nazwa z lewej zostaje przyczepiona do wartości z prawej. Nic się nie wyświetliło - zmienne czekają w pamięci.

Tworzenie zmiennych

Składnia jest zawsze ta sama: nazwa, znak równości, wartość. Zmienia się tylko rodzaj wartości:

1# Składnia: nazwa_zmiennej = wartość
2
3# Teksty (stringi)
4explorer_name = "Darwin"
5jungle_type = "tropikalna"
6
7# Liczby całkowite (integers)
8team_size = 5
9days_in_jungle = 14
10
11# Liczby zmiennoprzecinkowe (floats)
12temperature = 32.5
13humidity = 78.3
14
15# Wartości logiczne (booleans)
16is_safe = True
17found_water = False

Ważne: Python automatycznie rozpoznaje typ zmiennej! Nie musisz go deklarować. Ułamki piszemy z kropką: 32,5 nie da błędu, tylko stworzy parę liczb 32 i 5.

Nazewnictwo zmiennych - Zasady dżungli

Nazwa to tabliczka przy ścieżce: ma być czytelna dla Ciebie i poprawna dla Pythona.

Dozwolone:

Nazwa może zawierać litery, cyfry i podkreślniki, a słowa łączymy podkreślnikiem - to styl snake_case. Nawiasy kwadratowe tworzą listę, poznasz ją później:

1# Snake case (zalecane w Pythonie)
2jungle_temperature = 30
3discovered_species = ["Pyton", "Papuga", "Lew"]
4
5# Może zawierać litery, cyfry, podkreślniki
6species_1 = "Python regius"
7species_2 = "Panthera leo"
8rare_species_2024 = "Nowy gatunek"
9
10# Może zaczynać się od podkreślnika
11_private_notes = "Tajne informacje"
12__hidden_treasure = "Skarb"

Podkreślnik na początku umownie znaczy "do użytku wewnętrznego".

Niedozwolone:

Te zapisy kończą się błędem SyntaxError, czyli odmową uruchomienia programu, dlatego są zakomentowane. Ostatnia linia pokazuje poprawną wersję:

1# Nie może zaczynać się od cyfry
2# 1st_species = "Błąd!"  # SyntaxError
3
4# Nie może zawierać spacji ani myślnika
5# jungle temperature = 30  # SyntaxError
6# jungle-temperature = 30  # SyntaxError
7
8# Nie może używać znaków specjalnych
9# species! = "Błąd"  # SyntaxError
10# species@ = "Błąd"  # SyntaxError
11
12# Nie może być słowem kluczowym Pythona
13# if = 5  # SyntaxError
14# for = 10  # SyntaxError
15# def = "tekst"  # SyntaxError
16
17jungle_temperature = 30  # poprawnie: podkreślnik zamiast spacji

Myślnik odpada, bo Python czyta go jako minus: jungle-temperature to odejmowanie, a do działania nie da się nic przypisać.

Słowa kluczowe Pythona (zarezerwowane):

Słowa kluczowe mają w języku stałe znaczenie, więc nie mogą być nazwami zmiennych:

1# Tych nazw NIE MOŻESZ używać jako zmiennych:
2# False      await      else       import     pass
3# None       break      except     in         raise
4# True       class      finally    is         return
5# and        continue   for        lambda     try
6# as         def        from       nonlocal   while
7# assert     del        global     not        with
8# async      elif       if         or         yield
9
10import keyword
11print(len(keyword.kwlist))  # 35

Listę zawsze sprawdzisz w keyword.kwlist. Słowa async i await doszły w Pythonie 3.7, więc starsze tabelki ich nie mają.

Dobre praktyki nazewnictwa

Python przyjmie nazwę t, ale Ty za tydzień nie będziesz pamiętać, co oznaczała. Porównaj nazwy:

1# Opisowe nazwy - od razu wiadomo, co przechowują
2daily_temperature = 32
3discovered_species_count = 15
4expedition_start_date = "2024-11-24"
5
6# Złe nazwy - niejasne, krótkie
7t = 32  # Co to jest t?
8x = 15  # Co oznacza x?
9d = "2024-11-24"  # Data czego?
10
11# Snake case (Python style)
12jungle_humidity_level = 80
13
14# camelCase (popularny w JavaScript i Javie) - w Pythonie nie dla zmiennych!
15jungleHumidityLevel = 80
16
17# Długie nazwy są OK, jeśli są opisowe
18number_of_rare_species_discovered_in_2024 = 3  # Jasne!

Oba style zadziałają, bo Python nie sprawdza stylu. To umowa z przewodnika PEP 8: zmienne w snake_case, a PascalCase (np. JungleExpedition) dla klas. Polecam snake_case od pierwszego dnia.

Wyświetlanie zmiennych

Funkcja print() przyjmuje zmienną jak tekst, a f-string, czyli napis z literą f przed cudzysłowem, wstawia wartości prosto w zdanie:

1explorer_name = "Darwin"
2expedition_day = 5
3
4# Zwykły print
5print(explorer_name)  # Darwin
6print(expedition_day)  # 5
7
8# Print z tekstem
9print("Badacz:", explorer_name)  # Badacz: Darwin
10
11# F-string (najlepszy sposób!) - Python 3.6+
12print(f"Witaj, {explorer_name}!")
13# Witaj, Darwin!
14
15print(f"Dzień ekspedycji: {expedition_day}")
16# Dzień ekspedycji: 5
17
18# Złożone f-stringi
19species_found = 12
20days = 3
21print(f"Odkryliśmy {species_found} gatunków w {days} dni!")
22# Odkryliśmy 12 gatunków w 3 dni!
23
24print(f"Temperatura: {30}°C")  # Temperatura: 30°C

Python oblicza wszystko w klamrach {}: zmienną, działanie, nawet samą liczbę, jak w ostatniej linii. Bez litery f klamry zostałyby wypisane dosłownie. Przecinek w print() też działa, ale polecam f-stringi, bo są czytelniejsze.

Zmiana wartości zmiennej

Zmienne mogą zmieniać wartość (dlatego się nazywają "zmiennymi"!). Każdy dzień przynosi odkrycia, a my aktualizujemy ten sam wpis:

1# Dzień 1 ekspedycji
2species_count = 5
3print(f"Dzień 1: {species_count} gatunków")  # Dzień 1: 5 gatunków
4
5# Dzień 2 - znaleźliśmy więcej
6species_count = 12
7print(f"Dzień 2: {species_count} gatunków")  # Dzień 2: 12 gatunków
8
9# Dzień 3 - dodajemy nowe odkrycia
10species_count = species_count + 7  # 12 + 7 = 19
11print(f"Dzień 3: {species_count} gatunków")  # Dzień 3: 19 gatunków

Stara wartość przepada przy każdym przypisaniu. W ostatnim kroku Python najpierw liczy prawą stronę (12 + 7), a potem przypina wynik do nazwy. Samo species_count + 7 bez = niczego by nie zmieniło.

Wiele zmiennych jednocześnie

Python pozwala na sprytne przypisania: kilka zmiennych w jednej linii, wspólną wartość startową i zamianę miejscami:

1# Przypisanie wielu zmiennych w jednej linii
2x, y, z = 10, 20, 30
3print(f"x={x}, y={y}, z={z}")  # x=10, y=20, z=30
4
5# Ta sama wartość dla wielu zmiennych
6a = b = c = 0
7print(f"a={a}, b={b}, c={c}")  # a=0, b=0, c=0
8
9# Zamiana wartości (swap)
10first = "A"
11second = "B"
12print(f"Przed: first={first}, second={second}")  # Przed: first=A, second=B
13
14first, second = second, first  # Magiczna zamiana!
15print(f"Po: first={first}, second={second}")  # Po: first=B, second=A

Przy zamianie Python najpierw odczytuje obie wartości, a potem przypisuje je na krzyż, więc pomocnicza zmienna jest zbędna. Liczba nazw musi się zgadzać z liczbą wartości: x, y = 1, 2, 3 to błąd ValueError.

Input - Zbieranie danych od użytkownika

Dane od użytkownika zbiera funkcja input(): wyświetla pytanie, czeka na odpowiedź z klawiatury i oddaje ją programowi:

1# Proste pytanie
2name = input("Jak masz na imię? ")
3print(f"Witaj, {name}!")
4
5# Input ZAWSZE zwraca string (tekst)!
6age_text = input("Ile masz lat? ")
7print(type(age_text))  # <class 'str'>
8
9# Konwersja na liczbę
10age = int(age_text)  # Zmiana string → int
11print(f"Za rok będziesz mieć {age + 1} lat")

WAŻNE: input() zawsze zwraca string! Wpisane 25 to napis "25", a "25" + 1 kończy się błędem TypeError. Liczbę da dopiero konwersja: int() albo float().

Praktyczny przykład - Dziennik ekspedycji

Złóżmy wszystko w program do wieczornego wpisu w dzienniku: pyta o dane, konwertuje liczby i drukuje raport:

1# Program: Dziennik badacza
2print("=== Dziennik Ekspedycji ===")
3
4# Zbieramy dane
5explorer_name = input("Imię badacza: ")
6location = input("Lokalizacja: ")
7species_found = int(input("Ile gatunków odkryłeś/aś dzisiaj? "))
8temperature = float(input("Temperatura (°C): "))
9notes = input("Notatki z dnia: ")
10
11# Wyświetlamy raport
12print("\n--- RAPORT DZIENNY ---")
13print(f"Badacz: {explorer_name}")
14print(f"Lokalizacja: {location}")
15print(f"Odkryte gatunki: {species_found}")
16print(f"Temperatura: {temperature}°C")
17print(f"Notatki: {notes}")
18print("--- KONIEC RAPORTU ---")

W zapisie int(input(...)) odpowiedź od razu trafia do konwersji, więc species_found jest liczbą. Pole location zostaje stringiem, bo na nim nie liczymy.

Zadanie praktyczne

Spróbuj samodzielnie stworzyć program, który:

  1. Pyta o Twoje imię
  2. Pyta o ulubione zwierzę
  3. Pyta o ulubioną liczbę
  4. Wyświetla: "Cześć {imię}! Twoje ulubione zwierzę to {zwierzę} i ulubiona liczba to {liczba}!"
Kod do tej lekcji: main.py
1# Zadanie: Stwórz program zbierający dane użytkownika
2
3# TODO: Poproś o imię
4name = input("Jak masz na imię? ")
5
6# TODO: Poproś o ulubione zwierzę
7animal = input("Ulubione zwierzę: ")
8
9# TODO: Poproś o ulubioną liczbę
10number = input("Ulubiona liczba: ")
11
12# TODO: Wyświetl wiadomość używając f-stringa
13print(f"Cześć {name}! Twoje ulubione zwierzę to {animal} i ulubiona liczba to {number}!")

Podsumowanie

Przed przejściem dalej upewnij się, że:

  • Potrafisz stworzyć zmienną i zmienić jej wartość
  • Rozumiesz zasady nazewnictwa
  • Wyświetlasz zmienne przez print() i f-stringi
  • Znasz różnicę między input() (string) a int(), float()

W następnej lekcji Darwin pokaże Ci typy danych - jak klasyfikować odkrycia w dżungli!

Pamiętaj: zmienna to podpisany słoik w obozowym namiocie - nazwa na etykiecie, wartość w środku, a zawartość możesz wymienić w każdej chwili.

Widzisz błąd w tej lekcji?

Sprawdź się

Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.

  1. 1. Która nazwa zmiennej jest POPRAWNA w Pythonie?

  2. 2. Który styl nazewnictwa jest zalecany dla zmiennych w Pythonie?

  3. 3. Funkcja input() zwraca dane jako:

  4. 4. Co wyświetli: print(f'Temperatura: {30}°C')?

Zadania praktyczne w grze

  • Edytor kodu

    Stwórz zmienną explorer_name z wartością "Darwin":

  • Edytor kodu

    Stwórz 4 zmienne różnych typów: tekst (str), liczbę całkowitą (int), liczbę z kropką (float) i wartość logiczną (bool):

  • Edytor kodu

    Zapisz imię w zmiennej name i wyświetl powitanie z tym imieniem, używając f-stringa:

  • Klikanie w kolejności

    Ułóż wywołanie print(), które wyświetli napis Hello:

  • Układanie w pionie

    Uporządkuj kroki programu:

Przydatne artykuły