Kurs Python · Moduł 1: Podstawy Pythona
Zmienne - Ścieżki w Dżungli
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 = TrueZnak = 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 = FalseWaż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 spacjiMyś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)) # 35Listę 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°CPython 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ówStara 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=APrzy 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:
- Pyta o Twoje imię
- Pyta o ulubione zwierzę
- Pyta o ulubioną liczbę
- 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) aint(),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. Która nazwa zmiennej jest POPRAWNA w Pythonie?
2. Który styl nazewnictwa jest zalecany dla zmiennych w Pythonie?
3. Funkcja input() zwraca dane jako:
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: