Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # KOKEILE HETI LUENNON ALUSSA TOIMIIKO SEURAAVA KOODI PYCHARMISSASI:
- # Jos ei toimi, ks. Moodlesta "SSL-ongelmat internet-datan kanssa, korjausvaihtoehdot"
- # Toimiessaan oikein, tulostaa ohjelma raakadataa konsoliin
- # Jos tulee SSL-virhe, silloin koodi ei toimi oikein
- import urllib.request
- # get internet data
- url = 'https://edu.frostbit.fi/api/events'
- req = urllib.request.Request(url)
- raw_data = urllib.request.urlopen(req).read().decode("UTF-8")
- print(raw_data)
- # UUSI TIEDOSTO
- # kokoelmat kokoelman sisällä, esim. lista
- temp_day_1 = [13.5, 16.4, 11.6, 11.3]
- temp_day_2 = [12.1, 15.2, 11.9, 10.4]
- temp_day_3 = [15.3, 17.6, 12.5, 11.6]
- temperatures = [temp_day_1, temp_day_2, temp_day_3]
- # suoraan tulostaminen ei ole muutoin kuin testimielessä hyödyllistä
- # koska tätä formaattia ei tavallinen käyttäjä oikein pysty hahmottamaa
- # yleensä vain katsotaan tuleehan edes jotakin dataa läpi
- # print(temperatures)
- # muistisääntö: jos on lista, joka koostuu listoista
- # tarvitaan silmukka, jossa on silmukka
- # esim. for-silmukka -> sisällä toinen for-silmukka
- # silmukoidaan kaikista lämpötiloista yksi päivä kerrallaan
- for day in temperatures:
- print("Vaihdetaan päivää!")
- # silmukoidaan tämänhetkisen päivän
- # jokainen lämpötila
- for temperature in day:
- print(temperature)
- print()
- # UUSI TIEDOSTO, kokeile PYTHON TUTORISSA!
- # tuotteet omissa kategorioissaan
- books = ["Da Vinci Code", "Taru sormusten herrasta", "Light Fantastic"]
- movies = ["Jurassic Park", "Interstellar", "Forrest Gump"]
- # kaikki verkkokaupan tuotteet ovat omina listoinaan tässä listassa
- products = [books, movies]
- # silmukoidaan kategoriat läpi
- for category in products:
- # ... ja sitten silmukoidaan tämän hetkisen / aktiivisen kategorian kaikki tuotteet
- for item in category:
- print(item)
- # UUSI TIEDOSTO
- # dictionary dictionaryn sisällä
- book = {
- "name": "My Lady Jane",
- "year": 2016,
- "publisher": {
- "name": "HarperTeen",
- "organization": "HarperCollins Publishers",
- "location": "New York"
- }
- }
- # pelkkä kirjan nimi
- print(book['name'])
- # tapa 1: tallennetaan alidictionary omaan muuttujaan
- publisher = book['publisher']
- print(publisher['organization'])
- # tapa 2: voidaan myös suoraan ketjuttaa, mutta jos aiempi
- # tapa on helpompi, käytä sitä
- print(book['publisher']['organization'])
- # UUSI TIEDOSTO
- # esimerkki, lista dictionaryn sisällä
- book = {
- "name": "My Lady Jane",
- "year": 2016,
- "authors": ["Cynthia Hand", "Brodi Ashton", "Jodi Meadows"]
- }
- # jos halutaan yksittäinen kirjoittaja, käytetään indeksiä
- # tapa 1: käytetään apumuuttujia
- authors = book['authors']
- first_author = authors[0]
- print(first_author)
- # tapa 2: suoraan ketjuttamalla -> authors -> ensimmäinen indeksi
- print(book['authors'][0])
- print()
- # jos halutaan kaikki kirjailijat käydä läpi, käytetään listaa
- for author in book['authors']:
- print(author)
- # UUSI TIEDOSTO
- # ehdottomasti yleisin datarakenne työelämässä
- # eli lista joka koostuu dictionaryistä
- # jokainen dictionary yleensä koostuu myös monesta muusta rakenteesta
- products = [
- {"name": "Kahvinkeitin", "price": 79},
- {"name": "Astianpesukone", "price": 299},
- {"name": "Arkkupakastin", "price": 199},
- {"name": "Hammasharja", "price": 3}
- ]
- # tyypillisesti tällaista listaa käsitellään for-silmukalla
- for item in products:
- # puretaan tuotteen osat apumuuttujiin
- name = item['name']
- price = item['price']
- # tulostetaan tämän hetkisen tuotteen tiedot
- print(f"{name} --- {price} €")
- # UUSI TIEDOSTO
- # esimerkki 1
- import var_dump as vd
- # luodaan hotelli no. 1
- hotel_1 = {
- "name": "Snow Line Hotels",
- "rating": 4.3,
- "wifi": True,
- "free_breakfast": True,
- "services": ["sauna", "meetings", "restaurant", "parking", "safaris"],
- "price_level": 4
- }
- # luodaan hotelli no. 2
- hotel_2 = {
- "name": "North Ice Hostel",
- "rating": 3.5,
- "wifi": True,
- "free_breakfast": False,
- "services": ["sauna", "parking"],
- "price_level": 2
- }
- # asetetaan molemmat hotellit samaan listaan
- hotels = [hotel_1, hotel_2]
- # print(hotels)
- # print()
- # yksittäinen hotelli sisältää tämäntyylistä tietoa.
- # koska alkuperäinen data on lista hotelleja,
- # silmukan sisällä oleva hotelli sisältää aina nämä tiedot:
- # [0] => dict(6)
- # ['name'] => str(16) "Snow Line Hotels"
- # ['rating'] => float(4.3)
- # ['wifi'] => bool(True)
- # ['free_breakfast'] => bool(True)
- # ['services'] => list(5)
- # [0] => str(5) "sauna"
- # [1] => str(8) "meetings"
- # [2] => str(10) "restaurant"
- # [3] => str(7) "parking"
- # [4] => str(7) "safaris"
- # ['price_level'] => int(4)
- vd.var_dump(hotels)
- # myös yhtä hotellia voidaan tutkia, esim:
- # first_hotel = hotels[0]
- # vd.var_dump(first_hotel)
- # UUSI TIEDOSTO
- # esimerkki 1
- import var_dump as vd
- # luodaan hotelli no. 1
- hotel_1 = {
- "name": "Snow Line Hotels",
- "rating": 4.3,
- "wifi": True,
- "free_breakfast": True,
- "services": ["sauna", "meetings", "restaurant", "parking", "safaris"],
- "price_level": 4
- }
- # luodaan hotelli no. 2
- hotel_2 = {
- "name": "North Ice Hostel",
- "rating": 3.5,
- "wifi": True,
- "free_breakfast": False,
- "services": ["sauna", "parking"],
- "price_level": 2
- }
- # asetetaan molemmat hotellit samaan listaan
- hotels = [hotel_1, hotel_2]
- # print(hotels)
- # print()
- # yksittäinen hotelli sisältää tämäntyylistä tietoa.
- # koska alkuperäinen data on lista hotelleja,
- # silmukan sisällä oleva hotelli sisältää aina nämä tiedot:
- # [0] => dict(6)
- # ['name'] => str(16) "Snow Line Hotels"
- # ['rating'] => float(4.3)
- # ['wifi'] => bool(True)
- # ['free_breakfast'] => bool(True)
- # ['services'] => list(5)
- # [0] => str(5) "sauna"
- # [1] => str(8) "meetings"
- # [2] => str(10) "restaurant"
- # [3] => str(7) "parking"
- # [4] => str(7) "safaris"
- # ['price_level'] => int(4)
- # vd.var_dump(hotels)
- # silmukoidaan hotellidata läpi
- for hotel in hotels:
- print(hotel['name'])
- # UUSI VERSIO
- # hotellidata samalla tavalla kuin aikasemmin
- # silmukoidaan hotellidata läpi
- for hotel in hotels:
- print(hotel['name'])
- # yhdessä hotellissa on aina x-määrä palveluita (lista)
- # joten tarvitaan toinen silmukka
- # for service in hotel['services']:
- # print(service)
- # lähtökohtaisesti jos datassa on vain simppeli tekstilista
- # voidaan välttää for-silmukka käyttämällä join() -funktiota
- # eli yhdistetään kaikki palveluiden nimet rivinvaihdolla
- # lopputulos on sama kuin ylläolevassa for-silmukassa
- # (kommentoitu pois)
- services = "\n".join(hotel['services'])
- print(services)
- print()
- # UUSI VERSIO
- # hotellidata samalla tavalla kuin aiemmin
- # silmukoidaan hotellidata läpi
- for hotel in hotels:
- print(hotel['name'])
- # yhdessä hotellissa on aina x-määrä palveluita (lista)
- # joten tarvitaan toinen silmukka
- # for service in hotel['services']:
- # print(service)
- # lähtökohtaisesti jos datassa on vain simppeli tekstilista
- # voidaan välttää for-silmukka käyttämällä join() -funktiota
- # eli yhdistetään kaikki palveluiden nimet rivinvaihdolla
- # lopputulos on sama kuin ylläolevassa for-silmukassa
- # (kommentoitu pois)
- services = "\n".join(hotel['services'])
- # myös ylimääräistä logiikkaa voidana tehdä ehtolauseilla
- if "restaurant" in hotel['services']:
- print("Hotellissa on ravintola.")
- if "sauna" in hotel['services']:
- print("Hotellissa on sauna.")
- print()
- # UUSI VERSIO
- # tehdään tyhjä lista, jonka ideana on kerätä kaikkien niiden hotellien
- # nimet, joissa on sauna
- restaurant_hotels = []
- # silmukoidaan hotellidata läpi
- for hotel in hotels:
- print(hotel['name'])
- # suodatetaan vain ne hotellit, joissa on ravintola
- if "restaurant" in hotel['services']:
- restaurant_hotels.append(hotel['name'])
- # nyt kun kaikki hotellit on käsitelty, voidaan tarkastella
- # missä hotelleissa on sauna, tulostetaan testimielessä lista suoraan
- print()
- print(restaurant_hotels)
- # UUSI TIEDOSTO
- # urllib mahdollistaa raakadatan lataamisen internetistä
- # json mahdollistaa raakadatan muuntamiseen Python-formaattiin
- import urllib.request
- import json
- import var_dump as vd
- # get internet data
- url = 'https://edu.frostbit.fi/api/events'
- req = urllib.request.Request(url)
- raw_data = urllib.request.urlopen(req).read().decode("UTF-8")
- # raw_data on nyt raakamuotoinen JSON-data, joka pitää
- # muuntaa Pythonin datamuotoon
- data = json.loads(raw_data)
- # var_dumpilla katsotaan sisällön rakenne
- # vd.var_dump(data)
- # kommenttiin ylös yhden esimerkki-eventin sisältö:
- # [3] => dict(4)
- # ['name'] => str(66) "Helena Saarikoski: Kirjeitä Eppu Normaalille: Päiväkirja 2009–2019"
- # ['date'] => str(10) "17.12.2024"
- # ['categories'] => list(4)
- # [0] => str(10) "keskustelu"
- # [1] => str(12) "kirjallisuus"
- # [2] => str(6) "kirjat"
- # [3] => str(19) "kulttuuritapahtumat"
- # ['address'] => dict(2)
- # ['street_address'] => str(18) "Töölönlahdenkatu 4"
- # ['postal_code'] => str(5) "00100"
- # käydään jokainen eventti silmukassa läpi
- for event in data:
- print(event['name'])
- # UUSI TIEDOSTO
- # data samalla tavalla kuin aiemmin
- # käydään jokainen eventti silmukassa läpi
- for event in data:
- # nimitieto saadaan suoraa päätasolta
- print(event['name'])
- # haetaan osoitetiedot
- street_address = event['address']['street_address']
- postal_code = event['address']['postal_code']
- print(f"{postal_code} {street_address}")
- # kategoriat
- categories = ", ".join(event['categories'])
- # jos kategoriat puuttuu => ilmoitetaan käyttäjälle
- if categories != "":
- print(f"KATEGORIAT: {categories}")
- else:
- print(f"-- EI KATEGORIOITA --")
- print()
- # UUSI VERSIO
- # VERSIO 2: yksinkertainen hakukone:
- # näytä vain sellaiset tapahtumat, joissa on haettu kategoria
- # urllib mahdollistaa raakadatan lataamisen internetistä
- # json mahdollistaa raakadatan muuntamiseen Python-formaattiin
- import urllib.request
- import json
- # get internet data
- url = 'https://edu.frostbit.fi/api/events'
- req = urllib.request.Request(url)
- raw_data = urllib.request.urlopen(req).read().decode("UTF-8")
- # raw_data on nyt raakamuotoinen JSON-data, joka pitää
- # muuntaa Pythonin datamuotoon
- data = json.loads(raw_data)
- # käyttäjän hakusana kategorialle
- choice = input("Millaisia tapahtumia haet?\n")
- # käydään jokainen eventti silmukassa läpi
- for event in data:
- # kategoriat
- categories = ", ".join(event['categories'])
- # continue on kätevä suodatusasioissa
- # eli jos haettu kategoria puuttuu => continue
- # => eli skipataan tämä tapahtuma
- if choice not in categories:
- continue
- # nimitieto saadaan suoraa päätasolta
- print(event['name'])
- # haetaan osoitetiedot
- street_address = event['address']['street_address']
- postal_code = event['address']['postal_code']
- print(f"{postal_code} {street_address}")
- # jos kategoriat puuttuu => ilmoitetaan käyttäjälle
- if categories != "":
- print(f"KATEGORIAT: {categories}")
- else:
- print(f"-- EI KATEGORIOITA --")
- print()
- # UUSI VERSIO
- # VERSIO 3: yksinkertainen hakukone:
- # näytä vain yksi tapahtuma, eli ensimmäinen joka osuu hakusanaan
- # älä hae muita tapahtumia
- # urllib mahdollistaa raakadatan lataamisen internetistä
- # json mahdollistaa raakadatan muuntamiseen Python-formaattiin
- import urllib.request
- import json
- # get internet data
- url = 'https://edu.frostbit.fi/api/events'
- req = urllib.request.Request(url)
- raw_data = urllib.request.urlopen(req).read().decode("UTF-8")
- # raw_data on nyt raakamuotoinen JSON-data, joka pitää
- # muuntaa Pythonin datamuotoon
- data = json.loads(raw_data)
- # käyttäjän hakusana kategorialle
- choice = input("Millaisia tapahtumia haet?\n")
- # käydään jokainen eventti silmukassa läpi
- for event in data:
- # kategoriat
- categories = ", ".join(event['categories'])
- # continue on kätevä suodatusasioissa
- # eli jos haettu kategoria puuttuu => continue
- # => eli skipataan tämä tapahtuma
- if choice in categories:
- # nimitieto saadaan suoraa päätasolta
- print("\nNäytetään vain ensimmäinen löydetty hakutulos:")
- print(event['name'])
- # haetaan osoitetiedot
- street_address = event['address']['street_address']
- postal_code = event['address']['postal_code']
- print(f"{postal_code} {street_address}")
- # jos kategoriat puuttuu => ilmoitetaan käyttäjälle
- if categories != "":
- print(f"KATEGORIAT: {categories}")
- else:
- print(f"-- EI KATEGORIOITA --")
- # koska löydettiin tapahtuma, mikä täsmää hakusanaan
- # kutsutaan break eli lopetaan etsintä
- break
- # VINKKEJÄ TEHTÄVÄÄN 7.5
- import json
- import urllib.request
- url = "https://edu.frostbit.fi/api/weather/"
- req = urllib.request.Request(url)
- raw_data = urllib.request.urlopen(req).read().decode("UTF-8")
- weather = json.loads(raw_data)
- strongest_wind = 0
- strongest_wind_city = ""
- weakest_wind = 0
- # jne jne
- # silmukoidaan säädata mittauspaikka kerrallaan
- for city in weather:
- print(city['location'])
- print(city['wind'])
- print()
- # tässä sitten ehtolauseita jotka pitää kirjaa suurimmasta ja pienimmästä tuulesta
- # ks. myös tehtävänannon vinkit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement