# Materiały Hour of Code ## Odpalamy interpreter w konsoli i pokazujemy liczenie jak na kalkulatorze ```python= 4 # => 4 2 + 2 # => 4 5 - 2 # => 3 3 * 2 # => 6 9 / 2 # => 4.5 9 // 2 # => 4 (dzielenie całkowite) 2 ** 3 # => 8 (potęgowanie) 7 % 2 # => 1 (reszta z dzielenia) 2 * 2 + 2 # => 6 2 + 2 * 2 # => 6 (on wie jaka jest kolejność wykonywania działań) ``` Te znaki pomiędzy liczbami oznaczające działania nazywamy operatorami. ## Zmienne Zmienną możemy wyobrazić sobie jako pudełko z naklejką, do którego wkładamy jakąś wartość. Nazwa zmiennej musi być jednym ciągiem znaków (bez spacji). Nie może zawierać operatorów ani zaczynać się od liczb. Do pudełka możemy wkładać liczby całkowite i zmiennoprzecinkowe (ułamki dziesiętne), napisy oraz prawdę lub fałsz. Są to różne typy danych, które Python od siebie odróżnia. ```python= jakas_zmienna = 3 # W pudełku jest liczba 3, na naklejce jest napis 'jakas_zmienna' ``` Typy mają swoje własne nazwy w Pythonie: - Liczby całkowite - `int` - Liczby zmiennoprzecinkowe - `float` - Prawda lub Fałsz - `bool` - Napisy - `string` Typ zmiennej zależy od tego, co w niej przechowujemy. Na liczbach możemy wykonywać wszystkie operacje arytmetyczne. O napisach i zmiennych typu bool powiemy później. ```python= x = 7 y = 13 x + y # => 20 y % x # => 6 x * 3 # => 21 x + x - y # => 1 ``` W jednej zmiennej możemy przechowywać jedną wartość jednocześnie ```python= x = 7 x # => 7 x = 3 x # => 3 ``` Instrukcje w Pythonie wykonują się linijka po linijce. Oznacza to, że nie możemy wypisać wartości zmiennej, dopóki jej nie nadamy. ```python= x # => 'x' is not defined x = 3 ``` ## Stringi Na stringach możemy wykonywać dwie operacje: - Dodawanie dwóch stringów - Mnożenie stringa przez liczbę - zapytać dzieci co się stanie Napis to dowolny ciąg znaków w cudzysłowie (lub apostrofach - nie ma znaczenia). ```python= "kot" # => 'kot' "hipo" + "potam" # => "hipopotam" "bum" * 3 # => "bumbumbum" 3 * 3 # => 9 "3" * 3 # => "333" ``` ## Boole Zmienna jest typu `bool` jeśli ma wartość `True` lub `False` ```python= x = True x # => True x = False x # => False ``` ## Type Jeśli chcemy sprawdzić jakiego typu jest konkretna zmienna, możemy użyć `type` ```python= x = 2 type(x) # => int y = 'napis' type(y) # => string ``` ## Otwieramy środowisko programistyczne Prawdziwych programów nie piszemy w konsoli, służy ona raczej do sprawdzania poprawności lub działania pojedynczych wyrażeń. Programy piszemy w plikach z rozszerzeniem `.py`, a środowisko ułatwia edycję kodu i pozwala na uruchomienie programu. ## Wypisywanie i pobieranie danych w programie ### Print Służy do wypisywania tekstu na ekran. ```python= print(5) # => 5 print(3 + 5) # => 8 print("smieszny napis") # => smieszny napis x = 8 print(x) # => 8 y = "niesmieszny napis" print(y) # => niesmieszny napis ``` ### Input Służy do pobierania napisów podanych przez użytkownika. ```python= x = input("Wpisz coś: ") print(x) print(x * 2) ``` Wartość zwrócona przez input jest zawsze traktowana jako napis, nawet jeśli wpiszemy liczbę. Żeby program zinterpretował ją jako liczbę, musimy ręcznie zmienić jej typ. ```python= x = input("Podaj pierwszą liczbę: ") # 3 y = int(input("Podaj drugą liczbę: ")) # 4 print(x * 2) # => 33 print(y * 2) # => 8 ``` ## Porównywanie wartości Mamy zestaw operatorów do porównywania wartości. Porównania zwracają wartość typu `bool`. ```python= print(5 > 2) # => True print(2 == 3) # => False # Do sprawdzenia równości używamy dwóch znaków równości # bo pojedynczy służy do przypisania x = 4 print(x <= 7) # => True print(x < 0) # => False y = 8 print(x != y) # => True print(x >= y) # => False ``` ## Instrukcje warunkowe Jeśli chcemy, żeby jakiś kod został wykonany pod pewnym warunkiem, używamy instrukcji `if`. Po warunku piszemy dwukropek, a wszystkie instrukcje, które mają się pod nim wykonać zapisujemy z wcięciem. ```python= x = 15 if x < 0: print("x jest liczbą ujemną") # => nic nie wypisze if x > 0: print("x jest liczbą dodatnią") # => x jest liczbą dodatnią x = x - 10 if x > 0: print("x - 10 też jest liczbą dodatnią") # => x - 10 też jest liczbą dodatnią ``` Jeśli chcemy, żeby w przeciwnym przypadku stało się coś innego, używamy `else`. ```python= x = -3 if x > 0: print("x jest liczbą dodatnią") else: print("x nie jest liczbą dodatnią") ``` Jeśli chcemy rozważyć więcej niż dwa możliwe przypadki, możemy to zrobić używając `elif` ```python= x = 5 if x > 0: print("x jest liczbą dodatnią") elif x == 0: print("x jest zerem") else: print("x jest liczbą ujemną") ``` Jeśli chcemy mieć więcej niż jeden warunek, używamy odpowiednio `and` lub `or`. Jeśli wszystkie warunki muszą być spełnione piszemy `and`. Jeśli przynajmniej jeden warunek musi być spełniony piszemy `or`. ```python= imie = "Jan" wiek = 23 if imie == "Jan" and wiek == 23: print("Nazywasz sie Jan i masz 23 lata.") if imie == "Jan" or imie == "Robert": print("Nazywasz sie Jan lub Robert") ``` ### Zadanko dla słuchaczy Napisać program, który pobierze od użytkownika jego wiek i wypisze czy jest pełnoletni. ```python= wiek = int(input("Podaj swój wiek: ")) if wiek > 18: print("Jesteś pełnoletni") else: print("Nie jesteś pełnoletni") ``` ## Pętle Jeśli chcemy jakąs instrukcję wykonać kilka razy, to do tej pory napisalibyśmy ją pięć razy. Zamiast tego możemy użyć pętli. Zapis pętli jest podobny do ifa (dwukropek i wcięcie). ```python= for i in range(10): print("normalnie bym to dziesięc razy pisał") ``` Mamy do wyboru dwa rodzaje pętli: ### While Instrukcje wewnątrz pętli wykonują się dopóki warunek jest spełniony ```python= x = 1 while x <= 10: print(x) x = x + 1 # => 1 2 3 ... 10 ``` Przy pisaniu pętli `while` musimy upewnić się, że warunek kiedyś stanie się nieprawdziwy. W przeciwnym wypadku stworzymy nieskończoną pętle - program wykonuje się w nieskończoność. ```python= x = 1 while x <= 10: print(x) x = x - 1 ``` ### For Jeśli chcemy wykonać jakieś instrukcje konkretną liczbę razy, możemy użyć pętli `for`. Korzystając z niej, wiemy na którym powtórzeniu aktualnie jesteśmy. ```python= for i in range(10): print('to jest wykonanie numer ', i) ``` ### Zadanko dla słuchaczy 1. Wypisz kwadraty liczb od 0 do 10. ```python= for i in range(11): print(i ** 2) ``` 2. Wypisz liczby parzyste od 0 do 10. ```python= for i in range(11): if i % 2 == 0: print(i) ``` To zadanie możemy rozwiązać łatwiejszym sposobem. ```python= for i in range(0, 11, 2): print(i) ``` Do range'a możemy podać więcej niż jedną wartość. Pierwsza z nich oznacza początkową wartość `i`. Druga z nich oznacza wartość `i`, na której pętla ma się zakończyć. Trzecia oznacza krok, czyli wartość o którą `i` zwiększa się przy każdym obrocie pętli. Jeżeli w range'u podamy tylko jedną wartość, to początek jest ustawiany na 0, a krok na 1. 3. Oblicz sumę liczb od 1 do 20 ```python= suma = 0 for i in range(1, 21): suma = suma + i print(suma) ``` ## Listy Zdefiniowaliśmy wcześniej pojęcie zmiennej jako pudełka. Listę możemy sobie wyobrazić jako zestaw pudełek ustawionych obok siebie, w ustalonej kolejności. ```python= lista = [3, 12, 23, 523] ``` Elementy, które przechowujemy w liście, nie muszą być tego samego typu. Aby wykonać coś dla każdego elemetu z listy możemy użyć pętli `for`, na przykład jeśli chcemy wyświetlić wszystkie elementy listy można to zrobić tak: ```python= lista = [10, "napis", 4.20, 21.37, True] for element in lista: print(element) ``` Każdy element w liście jest numerowany kolejno od 0. Jeśli chcemy wypisać konkretny element z listy, to możemy go uzyskać odwołując się do jego indeksu. ```python= lista = [10, "napis", 4.20, 21.37, True] # 0, 1, 2, 3, 4 print(lista[1]) print(lista) #to jest drugi sposób na wypisanie listy lista[3] = 6.9 print(lista) ``` Możemy dodawać elementy do listy używając konstrukcji `.append()`. ```python= lista = [10, "napis", 4.20, 21.37, True] lista.append("pan tu nie stał") print(lista) # [10, "napis", 4.20, 21.37, True, "pan tu nie stał"] ``` ### Stringi to trochę listy Napis możemy potraktować jako listę znaków. Dzięki temu możemy wykonywać na nich podobne operacje jak na listach ```python= napis = "1eden 2wa tr3y" for znak in napis: print(znak) print(napis[3]) ``` ### Zadanko dla słuchaczy 1. Wypisz te elementy listy, które są liczbami całkowitymi. ```python= lista = [1, 'napisik', False, 7.77, 'pyk'] for element in lista: if type(element) == int: print(element) ``` 2. Oblicz i wypisz sumę wszystkich elementów listy ```python= lista = [1, 2, -5, 10, 3, -11] suma = 0 for element in lista: suma = suma + element print(suma) ``` 3. Znajdź największy element listy ```python= suma = [3, 5, 21, -3, 10, 0] najwiekszy = lista[0] # używamy jednego z elementów listy jako początkowej największej wartości, # bo gdybyśmy użyli np. 0, to nie zawsze dostalibyśmy dobry wynik. # np. w liście mamy same liczby ujemne - wtedy wypisalibyśmy 0, co nie byłoby prawdą # można pokazać co się stanie jak weźmiemy na początek 0 for element in lista: if element > najwiekszy: najwiekszy = element print(element) ``` ## Funkcje Jeśli chcemy wykonać taki sam fragment kodu w kilku miejscach, możemy zapisać go wewnątrz funkcji. Instrukcje `print`, `range`, `type`, których używaliśmy wcześniej są wbudowanymi funkcjami Pythona. Używanie funkcji sprawia, że kod jest bardziej czytelny. Funkcję definiujemy tak: ```python= def przywitanie(): print("pozdrowienia do więzienia z mojej funcji!!") przywitanie() # => pozdrowienia do więzienia z mojej funkcji!! ``` Funkcje mogą przyjmować argumenty, z których korzystamy w instrukcjach wewnątrz niej. ```python= def przywitanie(imie): print("witamy na wolności " + imie) przywitanie("Nikola") # => witamy na wolności Nikola ``` Funkcje mogą zwracać wartości, które możemy na przykład wyświetlić lub przypisać do zmiennej. ```python= def dodaj(a, b): return a + b print(dodaj(2, 7)) # => 9 x = dodaj(3, 1) print(x) # => 4 ``` ### Zadanko dla słuchaczy 1. Napisz funkcję`wieksza`, która przyjmie dwie liczby i zwóci większą z nich. ```python= def wieksza(a, b): if a > b: return a else: return b ``` 2. Napisz funkcję `czy_podzelna`, która przyjmie dwie liczby i sprawdzi, czy pierwsza jest podzielna przez drugą. ```python= def czy_podzielna(a, b): if a % b == 0: return True else: return False # nie musimy używać else, bo po return funkcja dalej się nie wykonuje def czy_podzielna(a, b): if a % b == 0: return True return False # skoro zwracamy tę samą wartość co warunek równości, # to możemy po prostu zwrócić warunek def czy_podzielna(a, b): return a % b == 0 ``` 3. Napisz funkcję `kelwin_na_celsjusz`, która przyjmuje temperaturę w Kelwinach, a zwraca w stopniach Celsjusza. $T_C = T_K - 273$. W przypadku podania wartości ujemnej funkcja ma zwrócić `None`. ```python= def kalwin_na_celsjusz(temperatura_k): if temperatura_k < 0: return None return temperatura_k - 273 ``` ### Funkcje wbudowane W celu ułatwienia pracy programistom Python ma automatycznie zdefiniowane różne funkcje pomocnicze. ```python= max(3, 5) # => 5 min(3, 5) # => 3 round(5.23) # => 5 len([1, 2, 3]) # => 3 (długośc listy) abs(-4) # => 4 (wartość bezwzględna) sum([-2, 4, 6]) # => 8 (suma elementów w liście) ``` Wiele funkcji zdefiniowanych jest w bibliotekach, które możemy zaimportować do swojego kodu, na przykład w bibliotece `math` mamy różne operacje arytmetyczne takie jak liczenie pierwiastka: ```python= from math import sqrt sqrt(9) # => 3 ``` ## Czas na ciekawe projekty - Przetwarzanie obrazków - Snake - Text to speech - ChatGPT?