# Python
## Jak używać tego tutorialu?
1. Wejdź na stronę https://www.programiz.com/python-programming/online-compiler/.
2. Po lewej znajduje się **edytor** kodu. Tam możesz wpisywać kod.

3. Kiedy klikniesz niebieski przycisk "Run", po prawej stronie (w polu **Output**) pokaże się wynik działania programu.

4. Dla jak najlepszego zrozumienia lekcji, każdy fragment kodu z tego tutorialu wklejaj do edytora i sprawdzaj jego wynik.
### Zadanie
Wklej poniższy kod do edytora i podaj jego wynik.
```python
print(1532 * 765)
```
## Wprowadzenie
Python jest językiem programowania, który wykonuje instrukcje linijka po linijce, od góry do dołu. Dzięki temu łatwo zrozumieć, co się dzieje w naszym programie.
## 📘 1. Wypisywanie na ekran (funkcja `print()`)
Python potrafi wypisywać tekst, liczby i wyniki działań matematycznych. Wklej poniższy kod do edytora i sprawdź, co wypisze w polu Output.
### Przykłady:
```python=
print("Witaj, świecie!")
print(123)
print(2 + 3)
print(20.098)
print("Ania ma", 20, "lat")
print("Wynik działania 2024 - 209 to", 2024 - 209)
```
### Najważniejsze wnioski:
- Tekst (czyli napisy) zapisujemy w cudzysłowie: " "
- Liczby można wypisywać bez cudzysłowów
- Można też wypisywać wiele rzeczy naraz, oddzielając je przecinkami
### Zadania:
- Napisz program, który wypisze napis "Pierwsza lekcja programowania"
- Sprawdź, co się stanie, kiedy zapomnisz dodać cudzysłowiu w swoim programie. Jaki błąd pokazuje Ci się w polu output?
- Napisz program, który wypisze wyniki następujących działań matematycznych:
- 524 + 3124
- 12340 - 4123
- 28676 * 6123
- 20324 / 2
## 💬 2. Komentarze w Pythonie
Komentarze to linijki, które nie są wykonywane przez komputer. Komentarz zaczyna się od znaku #.
```python
# To jest komentarz – komputer tego nie przeczyta
print("To będzie widoczne") # To też działa – komentarz po kodzie
```
Komentarze służą do opisywania, co robi dana linijka lub funkcja w kodzie. Dzięki temu programiści pracujący wspólnie przy ogromnych projektach mogą ze sobą współpracować bez pytania co chwilę "Ej, po co tu jest ta linijka?". Właściwie, przy samodzielnym programowaniu też się to przydaje, bo odpowiedź zwykle brzmi "Nie wiem, nie pamiętam".
### Zadanie:
Dodaj komentarz, tłumaczący co robi dany fragment kodu nad każdą linijką z poprzedniego przykładu. Pierwszą i ostatnią linijkę masz już gotową.
```python=
# wypisujemy napis
print("Witaj, świecie!")
print(123)
print(2 + 3)
print(20.098)
print("Ania ma", 20, "lat")
# wypisujemy działanie, które wykonujemy, a następnie jego wynik
print("Wynik działania 2024 - 209 to", 2024 - 209)
```
## 🔢 3. Typy danych
Python rozróżnia kilka podstawowych typów danych:
- int – liczba całkowita, np. 5, 100, -42
- float – liczba zmiennoprzecinkowa (z częścią dziesiętną), np. 3.14, 0.5, -2.0; zwróć uwagę, że część dziesiętną zapisujemy po kropce, a nie po przecinku, jak na lekcjach matematyki :)
- str / string – tekst, np. "Ala", "Ala ma 12 lat", "123".
Jak mogliśmy zauważyć wcześniej, python **rozróżnia napis od liczby przez dodanie cudzysłowiu**.
### Zadanie
Skopiuj poniższy fragment kodu do edytora i sprawdź, co wypisze dla każdej linijki. W komentarzu obok linijki dodaj wynik wykonania jej oraz opis tego, co wg ciebie się tam stało. Pierwszą linijkę masz już gotową.
```python
print(123 + 45) # 168, python dodał liczby 123 i 45
print("123 + 45")
print("123" + "45")
```
Jak mogliśmy zobaczyć w poprzednim przykładzie, zależnie od tego, jak używamy cudzysłowiu python mógł:
- dodać liczby (rozpoznał, że dwa elementy są typu int i pomiędyz nimi znajduje się plus)
- wypisać napis (wszystko, co znajduje się w środku cudzysłowiu, jest typu string, jest wypisywanie "po prostu jak leci")
- skleić dwa napisy (jeśli pomiędzy dwoma napisami - typ string - znajduje się znak plus, python skleja te napisy w jeden).
### Funkcja type
Sprawdzić typ danych możemy za pomocą funkcji type.
```python
print(type(5)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("tekst")) # <class 'str'>
```
### Zadanie
Wypisz typ danych: 42, "42", 5.0, "3.02", "Python jest super". W komentarzu obok każdej linijki kodu napisz wynik (tak, jak było w przykładzie powyżej).
### Zmienianie typu danych
Jeśli potrzebujemy, możemy zmieniać typy danych.
```python=
int("5") # zmienia tekst (string) na liczbę (int)
float("3.5") # tekst (string) na liczbę zmiennoprzecinkową (float)
str(10) # liczba (int) na tekst (string)
# przykład użycia
print("53" + str(7)) # sklejanie napisów daje 537
print(int("53") + 7) # dodanie liczb daje 60
```
### Zadania
- Zamień tekst "123" na liczbę i dodaj do niej 7
- Zamień tekst "0.36" na liczbę zmiennoprzecinkową i odejmij do niej 5
- Zamień liczbę 99 na tekst i wypisz: "Mam 99 lat"
- Napisz program, który wypisze działanie i jego wynik w jednej linijce, np. `876 * 542 = 474792`.
## 📦 4. Zmienne
Zmienne to takie „pudełka” na dane – możemy w nich coś zapisać, a potem tego używać.
```python
wiek = 12
imie = "Ola"
print(imie, "ma", wiek, "lat")
```
Bardzo istotna jest kolejność zapisywania. Mimo, że w matematyce `x = 5` i `5 = x` to to samo, dla pythona jest to kompletnie coś innego. Jeśli chcemy przypisać wartość 5 do zmiennej x, musimy napisać `x = 5`.
### Zadania
- Stwórz zmienną nazwa_miasta i przypisz do niej nazwę swojego miasta. Wypisz tekst: "Mieszkam w {miasto}"
- Stwórz dwie zmienne z liczbami i wypisz ich sumę, różnicę i iloczyn
### Zmienianie wartości zmienneh
Możemy też zmieniać wartość zmiennej:
```python
wiek = 10
wiek = wiek + 1
print("Za rok będziesz mieć", wiek)
x = 10
x = x * 2
print("Wartość x wzrosła dwukrotnie", x)
y = x - 3
print("y jest o 3 mniejsza od x", y)
```
Zmianę wartości możemy też zapisywać w trochę inny sposób:
```python=
a = 9
a += 1 # to jest to samo co a = a + 1
b = a - 4 # tego się nie da zapisać inaczej
b *= 2 # b = b * 2
```
### Zadania
- W kwietniu temperatury bywają różne. Poniżej znajduje się prognoza pogody z kilku kolejnych dni. Stwórz zmienną `temperatura`, a następnie dla każdego dnia wypisz jaka była jej wartość. Który z tych dni był najcieplejszy?
- w poniedziałek było 19 stopni
- we wtorek się ociepliło o 3 stopnie
- w środę temperatura spadła o 4 stopnie
- w czartek temperatura spadła o kolejne 2 stopnie
- w piątek temperatura wzrosła o 5 stopni
- w sobotę temperatura wzrosła o 1 stopień
- w niedzielę temperatura była taka sama jak w sobotę.
- Napiszemy program do śledzenia wydatków i obliczania salda. Utwórz zmienną `skarbonka` i przypisz jej jakąś początkową, dodatnią wartość. Następnie wymyśl kilka sytuacji z życia, które mogą zmienić jej wartość. Opisz je w komentarzach. Użyj liczb zmiennoprzecinkowych i 3 różnych działań arytmetycznych, możesz wprowadzić też inne zmienne. Wypisz końcową wartość. Przykładowy początek programu:
```python=
skarbonka = 300
skarbonka -= 245.99 # zakup butów
kasa_od_babci = 100
skarbonka += kasa_od_babci # prezent od babci
```
- stwórz dwie zmienne `a` i `b` i napisz program, który zmieni ich wartości bez używania operacji arytmetycznych. Jeśli początkowa wartość którejś z nich się zmieni, program powinien nadal poprawnie działać (czyli poprawnie zamieniać ich wartości), tzn.
```python
a = 10
b = 5
#... twój kod
print(a, b) # wypisze 5 10
```
i w sytuacji kiedy zmienię wartość a
```python
a = 23
b = 5
#... twój kod DOKŁADNIE TEN SAM CO WCZEŚNIEJ
print(a, b) # wypisze 5 23
```
- napisz program, który wykona kolejno instrukcje
- przypisz zmiennej $x$ wartość 36
- podziel wartość zmiennej $x$ przez 2
- przypisz zmiennej $y$ wartość $x^2$
- zmniejsz wartość $y$ o 5
- przypisz zmiennej $z$ wartość sumy x i y powiększoną o 1
- wypisz wartości zmiennych $x$, $y$ i $z$.
*poprawna odpowiedź: `18.0 319.0 338.0` (kolejno x, y, z)*
## ✏️ 5. Pobieranie danych od użytkownika; instrukcja input()
Funkcja `input()` służy do komunikacji z użytkownikiem naszego programu. W polu **output** pojawi się pytanie, które zadaje nam program. Tam też musimy wpisać odpowiedź.
```python=
imie = input("Jak masz na imię? ")
print("Cześć,", imie, "!")
```

### Zadanie
- Napisz program, który zapyta użytkownika najpierw o jego imię, a później a później rok urodzenia i wypisze komunikat `Jesteś {imię}, urodziłeś się w {rok} roku`.
- Spróbuj zmodyfikować program z poprzedniego zadania, aby zapytał o to samo, ale wyświetlił komunikat `Jesteś {imię}, masz {wiek} lat`. Wiek powinieneś obliczyć korzystając z podanej daty urodzenia i bieżącego roku. Jaki błąd wyświetli ci się w polu **output**? Czy umiesz go naprawić?
Funkcja input zawsze zwraca tekst (str), nawet jeśli użytkownik wpisze liczbę. Dlatego właśnie twój kod z poprzedniego zadania prawdopodobnie zwrócił błąd.
```python=
rok_urodzenia = input("W którym roku się urodził*ś? ")
print(type(rok_urodzenia)) # <class 'str'>
```
Możemy to jednak łatwo naprawić - wystarczy zmienić typ tak, jak w poprzednim temacie!
```python=
rok_urodzenia = input("W którym roku się urodził*ś? ")
print(2025 - int(liczba)) # rok urodzenia
```
### Zadanie
- Napisz program, który będzie pobierał od użytkownika dwie liczby i wypisywał ich wartości oraz sumę, różnicę, iloraz i iloczyn WRAZ Z DZIAŁANIAMI. Czyli **output** powinien wyglądać mniej więcej tak:
