PYTHON -> NOTATKI Z ZAJĘĆ (1 i 2)

ZAJĘCIA 1
DEFINICJA :
Python to język programowania ogólnego zastosowania cechujący się bogactwem bibliotek (czyli mamy sporo "gotowców") i czytelną, zwięzłą składnią (dzięki czemu jest relatywnie łatwy w nauce).
Należy do języków z mechanizmem automatycznego zarządzania pamięcią (co również ułatwia naukę).
Jest językiem interpretowanym (nie wymaga kompilacji przed uruchomieniem) co ułatwia przenoszenie aplikacji w nim napisanych na różne platformy (Windows, Linux, MacOS...) kosztem wydajności.
Cechuje się : PRZYSTĘPNOŚCIĄ, CZYTELNOŚCIĄ, BOGACTWEM "GOTOWCÓW", SZYBKOŚCIĄ TWORZENIA ZA JEGO POMOCĄ
Cechy te sprawiają, że jest to jeden z najpopularniejszych języków i często jest polecany osobom zaczynającym naukę programowania. Przyczynił się też do popularyzacji zastosowań AI i jest szeroko wykorzystywane w nauce, statystyce.
ZASTOSOWANIE PYTHONA (przykłady):
- indeksowanie danych
- AI
- analiza danych, data science
- zarządzanie infrastrukturą
- rekomendacje, profilowanie, przeszukiwanie, indeksowanie stron
- obróbka danych
- automatyzacje wysyłki
- tworzenie usług / mikroserwisów
- "klej" dla innych aplikacji
- automatyzacja
Python wykorzystywany jest przez takie firmy jak: Google (indeksowanie stron, przeszukiwanie), RedHat(automatyzacja, narzędzia systemowe / np Firewall, narzędzia do obsługi chmury), Meta, Instagram (zbudowany przede wszystkim na Pythonie / framework Django, utrzymują własny interpreter jęz. python / Cinder), Uber(backend), twilio (obsługa przez biblioteki pythona, analiza danych połączeń), Industrial Light & Magic (język do łączenia narzędzi wykorzystywanych do VFX, narzędzia do zarządzania zasobami, język skryptowy aplikacji 3D, testy i audyty zasobów), Spotify, Netflix, Dropbox (aplikacja na komputery stacjonarne, automatyzacje), Amazon (monitorowanie infrastruktury, AI analiza i przetwarzanie danych), NASA, Pinterest, Goldman Sachs, YouTube (kontrola video, szablony kontrolne, dostęp do danych, profilowanie).
NIE DLA!!! : aplikacji mobilnych, gier komputerowych (WOLNY)!!! przeglądarki komputerowe nie potrafią w prosty sposób zrozumieć Pythona ("rozmawiają" w HTML, CSS, JavaScript), słaby do frontendu!!!
SUBIEKTYWNE ZESTAWIENIA ZASTOSOWAŃ PYTHONA:
++ Python będzie dobry d0:
- uczenia maszynowego / AI
- inżynierii i analizy danych
- backend'u aplikacji internetowych
- automatyzacji (skrypty, DevOps)
- web-scraping'u
+- Python będzie ok do:
- aplikacji na komputery stacjonarne
- programowania mikrokontrolerów
- przy niektórych aplikacjach mobilnych
-- Python jest raczej niewskazany do:
- aplikacji systemowych
- aplikacji mobilnych
- gier
- frontend'u
*Stack Overflow survey (strona wykorzystywana przez programistów do zadawania pytań lub poszukiwania informacji i rozwiązań
PYTHON NA CODZIEŃ --> automatyzacja powtarzalnych czynności (np. dodawanie użytkowników), upraszczanie w np. wpisywaniu wielu maili, tworzenie botów, API (?), gierka PONG, składanie dokumentacji,
Python możemy traktować jak naukę języka obcego. Celem języka przy programowaniu jest:
- poinstruowanie komputera jak ma coś wykonać / wydawanie poleceń (np. dodaj 2+2)
- opisanie stanu obiektu ("Ten przedmiot w sklepie jest niedostępny")
- ustawienie jego cechy/właściwości ("ustaw wartości ceny na 12zł")
- prośba o podanie stanu/wartości
Jakimi środkami się komunikujemy = SŁOWA UŁOŻONE W ZDANIA
czasownik –> opisanie czynności –> funkcja/metoda
rzeczownik –> nazwanie rzeczy –> obiekt/zmienna
przymiotnik –> opisanie rzeczy –> wartość atrybutu
GRAMATYKA w Pythonie JEST BARDZO WAŻNA!!! (komputer nigdy nie domyśli się sam z siebie z kontekstu o co nam chodziło), np Python jest wyczulony na WCIĘCIA W TEKŚCIE - linijki tekstu umieszczone na tym samym poziomie wcięcia rozpatruje jako BLOKI, które trzeba traktować wspólnie.
PODSTAWOWA STRUKTURA "ZDANIA":
funkcja( ciało funkcji ) –> trochę jak: orzeczenie(podmiot)
print(mojazmienna)
*POLECAJKA = YouTube : CS50 (https://www.youtube.com/@cs50)
*https://www.humblebundle.com/books
*https://www.fanatical.com/en/bundle/books
*notatki = https://joplinapp.org/ , https://www.notion.com/ , https://obsidian.md/ , https://excalidraw.com/
Na czym najlepiej się skupić na początku nauki Pythona = INSTRUKCJE WARUNKOW, PĘTLE, STRUKTURY DANYCH!!!
ĆWICZENIA Z ZAJĘĆ:
imie = input("Podaj swoje imię: ")
print("Witaj!" , imie)
miles2km.py
mile = float(input("Wprowadź odległość w milach: "))
PRZELICZNIK = 0.621371
km = mile / PRZELICZNIK
print("Wartość w km to: ", km)
*input = użytkownik sam wpisuje dane do np. obliczenia czegoś
kostki.py
from random import randint
ilosc_scianek = 20
wyniki= []
print(f"Iloma kostkami o {ilosc_scianek} sciankach mam rzucić?")
ilosc_rzutow = int(input("Wprowadz liczbę kostek: "))
for rzut in range(ilosc_rzutow):
wynik_rzutu = randint(1, ilosc_scianek)
wyniki.append(wynik_rzutu)
print(f"Uzyskano: {wyniki}")
ZAJĘCIA 2
*PCEP - Certified Entry-Level Python Programmer (Exam PCEP-30-0x) - exam syllabus
ZMIENNE
= można porównać do "słoika z etykietą" (miejsce w pamięci komputera zarezerwowane na przechowywanie jakiejś zawartości, które możemy w jednoznaczny sposób odnaleźć/wskazać; ZMIENNA = ETYKIETKA na słoiku
Deklaracja zmiennej:
nazwa = zawartość, która ma być przechowywana pod tą nazwą, np
mojzwierzak = "pies"
WAŻNE!!!
- nazwa NIE MOŻE zawierać większości znaków specjalnych (*ASCII Table)
- NIE UŻYWAMY w nazwie spacji
- NIE UŻYWAMY polskich liter w nazwie (polskich znaków)
- nazwa NIE MOŻE składać się wyłącznie z cyfr lub zaczynać od nich
- w Pythonie przyjęte jest pisanie nazw zmiennych MAŁĄ LITERĄ, raczej nie używamy dużych liter (inni programiści mogliby pomyśleć, że jest to klasa)
- gdy nazwa składa się z kilku słów –> oddzielamy je "_" (tzw. podłogą)
- # na początku linii = komentarz (nie jest brane pod uwagę przy odczytywaniu kodu)
- przydatny skrót = Ctrl + / => przy zaznaczeniu kilku linijek kodu, możemy szybko zamienić go w komentarz(#) i na odwrót
- dobrze jest używać nazw, które dobrze obrazują jaka jest zawartość danej zmiennej
- znak "=" oznacza w języku Pythona "przypisanie"
Zmienna może być MODYFIKOWALNA ("otwarty słoik") i NIEMODYFIKOWALNA ("zamknięty słoik") –>
-> ZMIENNA MODYFIKOWALNA = zmienna ("etykieta") nie przeskoczy na nową zawartość, tylko istniejąca zawartość zostanie zaktualizowana
-> ZMIENNA NIEMODYFIKOWALNA = zmienna ("etykieta") przeskoczy na nową zawartość, a stara nie zostanie zmodyfikowana (jeśli dla starej zawartości nie dodamy zmiennej / etykiety, to wtedy Python ją automatycznie usuwa -> Garbage Collector)
Na to samo miejsce w pamięci komputera (na tą samą zawartość) może wskazywać kilka ZMIENNYCH! (na słoiku może być więcej niż jedna etykieta).
a=1
b=a
b=b+9
print("Zmienna a ma wartość: ",a)
print("Zmienna b ma wartość: ",b)
#a=1
#b=10
-> przyjmuje się, że liczby są takim słoikiem, którego zawartości nie można zmienić
-> [] => LISTA, np a = [1]
a=[1]
b=a
b.append(9)
print("Zmienna a ma wartość: ",a)
print("Zmienna b ma wartość: ",b)
#a=[1,9]
#b=[1,9]
-> przykład: b.append(9) => oznacza DOPISANIE do zawartości b liczby 9
Dynamiczne typy zmiennych
Zadeklarowana zmienna MOŻE zmienić swój typ - np. coś co wskazywało na liczbę chwilę później może wskazywać na tekst. Czyli w Pythonie taka operacja wykona się poprawnie:
moja_zmienna = 1
moja_zmienna = "pies"
Mimo tej możliwości którą daje Python zazwyczaj dobrą praktyką jest trzymanie pod utworzoną zmienną jednego typu danych.
-> nazwa zmiennej może wskazywać inną zmienną, np.
moj_zwierzak = "pies"
domowy_rozrabiaka = moj_zwierzak
- służy do wyświetlania na ekranie reprezentacji obiektu (np. do wyświetlania tekstu)
- składnia wygląda następująco:
print(zawartość_do_wyświetlenia)
zdanie = "To jakiś tekst."
print(zdanie)
#wyświetli się: To jakiś tekst.
Input
- służy do umożliwienia użytkownikowi wprowadzenia jakiejś zawartości
- wszystko co zostanie wprowadzone w ten sposób będzie traktowane jako tekst(!), jeśli chcemy wprowadzić z wykorzystaniem
input
liczbę musimy dokonać konwersji z tekstu na np. liczbę całkowitą, lub zmiennoprzecinkową - składnia wygląda następująco:
nazwa_zmiennej = input ("opcjonalny_komunikat dla użytkownika")
imie_gracza = input("Wprowadź imię: ")
brudnopis.py
#liczba1 = input("Podaj pierwszą liczbę: ")
#liczba2 = input("Podaj drugą liczbę: ")
#print(liczba1+liczba2)
# stwórz zmienną o nazwie moje_zwierze przechowujaca obiekt tekstowy kot
moje_zwierze = "kot"
print(moje_zwierze)
# # stworz zmienna o nazwie jakas_liczba przechowujaca liczbe calkowita 123
jakas_liczba = 123
print(jakas_liczba)
# # stworz zmienna o nazwia ulamek przechowujaca 1.25
ulamek = 1.25
print(ulamek)
# # stworz zmienna o nazwie imie umozliwiajaca uzytkownikowi wpisanie swojego imienia
# # po uruchomieniu aplikacji
imie = input("Podaj swoje imię: ")
# # majac stworzona zmienna imie z cwiczenia 1
# # wyswietl komunikat witajacy uzytkownika
# # np. jesli uzytkownik wprowadzi imie Przemek to
# # wyswietl mu "Witaj Przemek"
print("Witaj "+imie)
# # popraw poniższy kod tak żeby uzyskać
# # poprawny wynik dodawania liczbowego - czyli 5
zmienna1 = "2"
zmienna2 = "3"
print(int(zmienna1) + int(zmienna2))
zmienna1 = 2
zmienna2 = 3
print(zmienna1+zmienna2)
# # majac zmienna o nazwie hejzmienna przechowujaca wartos Hej!
# # napisz kod wyswietlajacy Hej! 5 razy po sobie
# hejzmienna = "Hej!"
# print(hejzmienna+hejzmienna+hejzmienna+hejzmienna+hejzmienna)
hejzmienna = "Hej!"
print(hejzmienna*5)
# popros uzytkownika o podanie 2 liczb całkowitych
# i przechowaj te wartości w zmiennych.
# podaj wynik dodawania tych liczb
# liczba_cal1 = input("Podaj pierwszą liczbę całkowitą: ")
# liczba_cal2 = input("Podaj drugą liczbę całkowitą: ")
# wynik = int(liczba_cal1)+int(liczba_cal2)
# print(wynik)
liczba_cal1 = int(input("Podaj pierwszą liczbę całkowitą: "))
liczba_cal2 = int(input("Podaj drugą liczbę całkowitą: "))
print(liczba_cal1+liczba_cal2)
Typy podstawowe
-> określają wspólne cechy obiektów, metody z nimi związane; dzięki nim programiści wiedzą jakie operacje na nich są dozwolone (a jakie nie). Są więc bardzo przydatnym środkiem komunikacji przy pisaniu aplikacji. Python obsługuje następujące typy podstawowe:
Liczby całkowite (integer, w skrócie int)
Liczy naturalne (1, 2, 3, 4...) i przeciwne do nich (-1, -2, -3) oraz zero.
Przypisując do zmiennej liczbę całkowitą po prostu podajemy ją po znaku równości np.
moja_liczba = 12
Liczby zmiennoprzecinkowe (float)
Liczby zapisane z "częścią ułamkową". Ważne - część ułamkowa zapisana jest po KROPCE, nie po przecinku.
moja_liczba = 22.15
Ciągi znaków (string)
Seria znaków zapisana między cudzysłowami pojedynczymi, lub podwójnymi (nie można ich jednak mieszać!) np.
moj_tekst = "To tylko tekst."
Wartości logiczne (bool)
Wartości prawda / fałsz zapisane jako True / False (istotna jest wielkość znaków!).
gra_gotowa = True
Podstawowe operacje:
- dodawanie (+) [int, float, string, bool]
- odejmowanie (-) [int, float, bool]
- mnożenie (*) [int, float, string (ale!!!), bool]
- dzielenie (/) [int, float]
- modulo (%) (reszta z dzielenia) [int, float]
!!! W przypadku ciągu znaków (string) możemy wykonać operację mnożenia przez liczbę - powtórzy nam to dany tekst wskazaną ilość razy. Nie można jednak mnożyć ciągu znaków przez ciąg znaków
!!! Wartości logiczne True / False są równoważne 1 i 0 - stąd też da się wykonać operacje dzielenia, czy modulo... z założeniem, że nie dzielimy przez 0
Możliwe jest zmienienie stringu na liczbę całkowitą !!!
zmienna1 = "6"
zmienna2 = "3"
print(int(zmienna1) + int(zmienna2))
#wyskoczy nam wynik dodawania liczb całkowitych, czyli 9
print("1" + "1")
print(1+1)
#11
#2
bmi.py
# waga = input("Podaj wagę w kg: ")
# wzrost = input("Podaj wzrost w metrach: ")
# bmi = int(waga) / float(wzrost) ** 2
# print(bmi)
# masa_ciala = float(input("Podaj masę ciała w kg: "))
# wzrost = float(input("Podaj wzrost w m: "))
# bmi = masa_ciala / wzrost**2
# zaokraglony = round(bmi, 2)
# print("Twoje BMI wynosi:", zaokraglony)
masa_ciala = float(input("Podaj masę ciała w kg: "))
wzrost = float(input("Podaj wzrost w m: "))
# bmi = masa_ciala / wzrost**2
# print("Twoje BMI wynosi: %.2f" % bmi )
#formated string
# print(f"Twoje BMI wynosi: {bmi}")
print(f"Twoje BMI wynosi: {masa_ciala / wzrost**2}")
kostki.py
from random import randint
ilosc_scianek = int(input("Wprowadź liczbę całkowitą informującą o ilości ścianek kostki: "))
wyniki= []
print(f"Iloma kostkami o {ilosc_scianek} sciankach mam rzucić?")
ilosc_rzutow = int(input("Wprowadz liczbę kostek: "))
for rzut in range(ilosc_rzutow):
wynik_rzutu = randint(1, ilosc_scianek)
wyniki.append(wynik_rzutu)
print(f"Uzyskano: {wyniki}")
Do czego wykorzystałabym Pythona:
- stworzenie aplikacji umożliwiającej łatwe znalezienie wydarzenia artystycznego, po podaniu odpowiednich danych, takich jak miejscowość, zasięg w jakim powinno wyszukiwać tych wydarzeń, wyszukiwanie ze względu na konkretną datę (lub zakres czasowy), w którym chcemy uczestniczyć w jakimś wydarzeniu, itd.
- aplikacja pomagająca wdrożenie dobrych nawyków, np. 10-minutowy spacer, wydzielenie godziny na zaznajomienie się z jakimś nowym programem itd.
- automatyzacja wysyłanych newsletterów związanych z firmą