# [WIP] Hour of Code 2024/2025 skrypt ## 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ń) (2 + 2) * 2 # => 8 (umiemy wymusić 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. Stara wartość jest zapominana ```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 stworzymy. ```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" ``` Gdy chcemy sprawdzić ilość liter (a dokładniej znaków) używamy `len()`, na przykład: ```python len("napis") # => 5 len("python jest super!") # => 18 ``` ## Boole Zmienna jest typu `bool` jeśli ma wartość `True` lub `False` ```python= x = True x # => True x = False x # => False ``` ## 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` (prawda, fałsz). ```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 # Wyniki porówania można zapisywać do zmiennych czyYWieksze = y >= x print(czyYWieksze) ``` ## 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ą if x - 10 > 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` (skrót od else if) ```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`. Możemy w jednym warunku łączyć `or` i `and` korzystając z nawiasów. To co jest w nawiasach zostanie sprawdzone jako pierwsze ```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") if (imie == "Jan" or imie == "Robert") and wiek == 23: print("Nazywasz sie Jan lub Robert i masz 23 lata") ``` ### 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. ```python= print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") print("normalnie bym to dziesięc razy pisał") ``` Zamiast tego możemy użyć pętli. Zapis pętli jest podobny do ifa (dwukropek i wcięcie). ```python= x = 1 while x <= 10: print("normalnie bym to dziesięc razy pisał") x = x + 1 ``` 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, na przykład: ```python= lista = [10, "napis", 4.20, 21.37, True] ``` 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]) # możemy wypisać konkretny element listy print(lista) # albo całą listę na raz 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ł"] ``` Jeśli chcemy się dowiedzieć, ile jest elementów w liście używamy `len()`, tak jak przy stringach: ```python lista = ["Ala", "ma", "kota"] len(lista) # => 3 ``` ### Stringi to też takie troche listy Stringi (napisy) trochę przypominają listy. Tak samo jak umiemy wyciągnąć wartość z listy, to ze stringa umiemy wyciągnąć pojedynczą literę Tak samo jak w listach litery numerowane są od 0 ```python= napis = "Ala ma kota" print(napis[0]) #A print(napis[4]) #m 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 i in range(len(lista) if type(element[i]) == int: print(element[i]) ``` 2. Oblicz i wypisz sumę wszystkich elementów listy ```python= lista = [1, 2, -5, 10, 3, -11] suma = 0 for i in range(len(lista)): suma = suma + element[i] print(suma) ``` 3. Wypisz ilość liter 'a' w słowie ```python= napis = "ala ma malego kotka" ile_a = 0 for i in range(len(napis)): if napis[i] == 'a': ile_a = ile_a + 1 print(ile_a) ``` 4. 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 i in range(len(lista)): if element[i] > najwiekszy: najwiekszy = element[i] print(element[i]) ``` ## Czas na ciekawe projekty - Przetwarzanie obrazków - Snake - Text to speech - ChatGPT?