diff --git a/guide/10_exercise.md b/guide/10_exercise.md new file mode 100644 index 0000000000000000000000000000000000000000..fe086dd29392fb30b930659b8cc8e978cb61b48d --- /dev/null +++ b/guide/10_exercise.md @@ -0,0 +1,164 @@ +0. Virtuális környezet és Modulok bemutatása gyakorlatban + +```python +# Beolvasás +# +# builtins.py fájlból jön ez az "open" függvény +# első paramétere a fájl neve és mindig onnan értékelődik ki +# ahonnan indítottuk a pythont. +# utána jövő paraméter, hogy hogyan nyitjuk meg a fájlt. +# r - read +# w - write: felülírja az egészet +# a - append: fájl végére ír hozzá +# x - Create: Létrehozza a fájlt. + +# r,w,a,x -et próbálják ki + +# Készítsenek egy 01_file.txt -t vagy hasonlót + +# Read: +fajl = open("01_file.txt", "r") +print(fajl.read()) + +fajl.close() # Mindig zárják be + +# Write +fajl = open("01_file.txt", "w") +fajl.write("Okay. ") +# Mi történt a fájlal? - Felülírta teljesen + + +fajl.close() + +# Append +fajl = open("01_file.txt", "a") +fajl.write("Okay?") +# Mi történt? - Végére írta + + +fajl.close() + + +# Create +fajl = open("something_new.txt", "x") +# Mi történt? - Létrehozta +# Ha újra lefutatják mi történik? - Errort kaptunk, ezt kezeljük is le! + +fajl.close() +``` + +```python +# Előző példában fájl újra létrehozáskor kaptunk +# egy hibát! +# Python ezeket az úgynevezett "objektumokat" szokta +# dobni, mikor hiba keletkezik és különféle +# adatokkal rendelkeznek, mint üzenet. +# Előzőben volt egy: FileExistsError: [Errno 17] File exists: 'something_new.txt' + +try: # Ezen a blokkon belüli dolgokat majd elkapja + fajl = open("something_new.txt", "x") + fajl.close() # Ha errort kap, akkor nem nyitja meg a fájlt, + # szóval nem kell a finally blokkba tenni +except FileExistsError as fe: # Itt feltudjuk típus szerint sorolni, hogy mit kapjon el. + print(fe) # Ha oda írjuk, hogy "as ...", akkor abba bele menti. + # Első körben as nélkül. "Hogyan tudnánk kiírni a hibát?" + + +# Ezután írjuk ki, hogy "kész a fájl" hibától független + +try: + fajl = open("something_new.txt", "x") + fajl.close() # Ha errort kap, akkor nem nyitja meg a fájlt, + # szóval nem kell a finally blokkba tenni +except FileExistsError as fe: + print(fe) +finally: + print("Fájl elkészítve! (Vagy már el volt)") +``` + +1. Készítsetek egy Python szkriptet, ami a https://hanyadikhetvan.attiss.eu/api -ról + leszedett információ alapján kiírja, hogy hanyadik hét van. + +```python +# https://hanyadikhetvan.attiss.eu/api + +import requests + + +# Mi az az API? +# Application Programming Interface, a lényeg, hogy +# ez az interfész, amin 1-1 alkalmazást elérünk és valamilyen +# formában tudunk vele kommunikálni. +# +# Nézzék meg, hogy mi van a https://hanyadikhetvan.attiss.eu/api oldalon. +# Ez egy JSON, mely egy sztenderd adatközlési mód a weben, +# a lényeg, hogy kulcs érték párosokat tudunk az oldalon lévőhöz hasonlóképp +# leírni. +# Na és használjuk! + +r = requests.get('https://hanyadikhetvan.attiss.eu/api') + +print(r) # <Response [200]> - Különböző státuszkódokkal térhet vissza + # egy API, pl 200 - OK, vagy 404 - Not Found +# Vannak beépített függvényeink +print(r.status_code) # Státuszkód számként +print(r.ok) # Státuszkód 200 és 400 közé esik + +# Na de olvassuk ki az adatunkat végre +print(r.content) # hmm ez így nem lesz tökéletes nekünk. Látható, hogy b'', azaz + # ezek bájtok, továbbá egy új sor is van benne +print(r.json()) # Újabb beépített függvény, mely készít nekünk egy Dictionary-t!! +print(type(r.json())) # <class 'dict'> +print(r.json()["week"]) # 5 + +# Végleges kód: + +import requests + +r = requests.get('https://hanyadikhetvan.attiss.eu/api') + +print(r.json()["week"]) +``` + +2. Írjátok meg a saját "hanyadikhétvan" apitokat. + +```python +# Ehhez a flask könyvtárat fogjuk használni, +# mellyel képesek vagyunk nagyon könnyedén +# webszervereket készíteni. + +import flask +import requests + +# Inicializáció. Ez az objektum fő amin +# keresztül mindent elérünk Flask-ben. +# Kosntruktorban átadtuk a jelenlegi App nevét, +# emlékeztek ha ez = "__main__" akkor ezt a fájlt +# indítottuk el. +app = flask.Flask(__name__) +# Engedélyezzük, hogy logoljon mindent +app.config["DEBUG"] = True + + +# Megmondjuk, hogy a /-re GET-el ezt a függvényt hívja meg. +# Hogy ez hogyan működik a háttérben? +# - Nézzenek utánna a különböző Python dekorátoroknak :) +@app.route('/', methods=['GET']) +def home(): + # Lekérjük az előző oldalról :D Laziness 100 + r = requests.get('https://hanyadikhetvan.attiss.eu/api') + # Visszatérünk vele + return r.json() + +app.run() +``` + +3. Kössétek össze az első szkriptetekkel + +```python +import requests + +r = requests.get('http://127.0.0.1:5000') + +print(r.json()["week"]) +```