import json

auto = {
    "marca":"Toyota",
    "modello":"Supra mk4",
    "anno_produzione":1993,
    "potenza_kW":243,
    
}

print(type(auto))
print(auto)

print(json.dumps(auto))


f = open("myJSON.json","w")
f.write(json.dumps(auto))
f.close()
1_json_dizionari/esercizio_001.py
angelogalantiscuola/2324_4M
#Esercizio 2, il programma richiedere all'utente di inserire i dati di n automobili, 
#poi di aggiungere tali dati in una lista di dizionari e infine salvare la lista in un file JSON
import json
import numpy as np
n=np.array([])
lista_di_auto=[]
#creazione dizionario
for i in range(2):
    marcaa=input("Inserire la marca dell'auto: ")
    modelloo=input("Inserire il modello dell'auto: ")
    annop=int(input("Inserire l'anno di produzione: "))
    cavalli=int(input("Inserire la potenza: "))
    #inserimento di dati  
    lista_di_auto.append(dict(marca=marcaa,modello=modelloo,anno=annop,potenza=cavalli))
with open("b.json","w")as f:
    f.write(json.dumps(lista_di_auto))

1_json_dizionari/esercizio_002.py
angelogalantiscuola/2324_4M
#1) crea un programma che legga la lista contenuta nel file JSON creato nel precedente esercizio e fornisca le seguenti funzionalità:
#-calcolo della rata del bollo per le auto contenute nella lista (formula: 2.58*kW(fino a 100kW) + 3.87(sui kW eccedenti))
#-calcolo dell'età media degli autoveicoli presenti nella lista

import json

def calcolaBollo (potenza_kW):
    if potenza_kW<=100:
        rata = potenza_kW * 2.58
    else:
        rata = 100*2.58 + (potenza_kW - 100) * 3.87 
    return float('%.2f' % rata)
    #return float(rata)

def calcolaEta(anno_produzione):
    return (2023-anno_produzione)



with open("cars.json","r") as f:
    cars = json.loads(f.read())

#print(type(cars))
#print(type(cars[0]))
#print(cars)

choice = int(input("Cosa vuoi fare?\n 1) calcola bollo\n 2) calcola età media parco auto\n"))

if choice==1:
    modello = input("Inserisci il modello: ")
    isPresent = False
    for temp in cars:
        if modello == temp["modello"]:
            isPresent = True 

    if isPresent == True:
        for temp in cars:
            if temp["modello"]==modello:
                print("La rata del bollo è", calcolaBollo(temp["potenza_kW"]))
                #bollo = calcolaBollo(temp["potenza_kW"])
                #print(f"La rata del bollo è {bollo:.2f}") #formattazione con f-string     
    else:
        print("Modello non presente!!!")

elif choice==2:
    eta=0
    for temp in cars:
        eta+=calcolaEta(temp["anno_produzione"])

    eta_media=eta/len(cars)
    print("l'età media del parco auto è", eta_media,"anno/i")

else:
    print("opzione non valida")

1_json_dizionari/esercizio_003.py
angelogalantiscuola/2324_4M
#Leggere il file es1.json contenente un dizionario e stampare a video le chiavi, i valori e la coppia chiavi-valori rispettivamente con i metodi keys(), values() e items().
#N.B
#1) Il programma dovrebbe funzionare a prescindere dal numero di coppie chiave-valore contenute nel dizionario. 
#2) Il formato dell'output dovrebbe essere simile allo screenshot allegato

import json

# Apro il file JSON e carico il dizionario
with open('es004.json', 'r') as file:
    data = json.load(file)

# Stampo le chiavi
print("Chiavi:")
for key in data.keys():
    print(key)

# Stampo i valori
print("\nValori:")
for value in data.values():
    print(value)

# Stampo le coppie chiave-valore
print("\nChiavi-Valori:")
for key, value in data.items():
    print(f"{key}: {value}")

1_json_dizionari/esercizio_004.py
angelogalantiscuola/2324_4M
# Realizzare un applicativo che permetta, mediante l'uso di dizionari, 
# liste e file JSON, la gestione del catalogo di un museo.

# In particolare, l'applicativo dovrà permettere di:
# 4) Consultare le stanze presenti
# 5) Cercare le informazioni su un opera
# 6) Cancellare un opera
# 7) Cancellare una stanza solo se vuota
 
# NB 
# - Ad ogni cambiamento, aggiornare il file JSON che garantisce la persistenza. 
# - Realizzare un menù numerato con le varie funzionalità elencate in precedenza.

import json

# - Progettare la struttura dati a priori in modo da garantire le funzionalità richieste.
# museo = {
#     "nome": "Museo di Roma",
#     "stanze": [],
# }

# stanza = {
#     "nome": "Rinascimento",
#     "opere": [],
# }

# opera = {
#     "titolo": "La creazione di Adamo",
#     "artista": "Michelangelo",
#     "anno": 1512,
# }



# 1) Creare una nuova stanza
def crea_stanza(museo: dict):
    # input
    nome_stanza = input("Inserisci il nome della stanza: ")
    # elaborazione
    stanza = {
        "nome": nome_stanza,
        "opere": [],
    }
    # controllo se la stanza è già presente
    for stanza in museo["stanze"]:
        if stanza["nome"] == nome_stanza:
            print("La stanza è già presente!")
            return None
    museo["stanze"].append(stanza)
    # output
    print("Stanza creata con successo!")
    return stanza

# 2) Aggiungere un opera ad una stanza(titolo, artista, anno)
def aggiungi_opera(museo: dict):
    # input
    nome_stanza = input("Inserisci il nome della stanza: ")
    titolo_opera = input("Inserisci il titolo dell'opera: ")
    artista_opera = input("Inserisci l'artista dell'opera: ")
    anno_opera = int(input("Inserisci l'anno dell'opera: "))
    # elaborazione
    opera = {
        "titolo": titolo_opera,
        "artista": artista_opera,
        "anno": anno_opera,
    }
    # controllo se la stanza è già presente
    for stanza in museo["stanze"]:
        if stanza["nome"] == nome_stanza:
            # controllo se l'opera è già presente nella stanza
            # TODO meglio controllare se l'opera è univoca in tutto il museo
            for opera in stanza["opere"]:
                if opera["titolo"] == titolo_opera:
                    print("Opera già presente!")
                    return None
            stanza["opere"].append(opera)
            print("Opera aggiunta con successo!")
            return opera
    print("Stanza non presente!")
    return None

# 3) Consultare le opere presenti in una stanza
def cerca_stanza(museo: dict, nome_stanza: str) -> dict:
    # elaborazione
    for stanza in museo["stanze"]:
        if stanza["nome"] == nome_stanza:
            return stanza
    return None

def stampa_opere_stanza(stanza: dict) -> None:
    # output
    if stanza is not None:
        print("Opere presenti nella stanza:")
        for opera in stanza["opere"]:
            print(opera["titolo"])
    else:
        print("Stanza non presente!")

museo = {
    "nome": "Museo di Roma",
    "stanze": [],
}

museo["stanze"].append(
    {"nome": "Rinascimento", "opere": 
    [{"titolo": "La creazione di Adamo", "artista": "Michelangelo", "anno": 1512}]
    }
    )
# crea_stanza(museo)
# aggiungi_opera(museo)

# stampa opere della stanza
nome_stanza = "dfsdfsdfsdfs"
stanza = cerca_stanza(museo, nome_stanza)
stampa_opere_stanza(stanza)

# stampa opere della stanza
nome_stanza = "Rinascimento"
stanza = cerca_stanza(museo, nome_stanza)
stampa_opere_stanza(stanza)

1_json_dizionari/esercizio_005.py
angelogalantiscuola/2324_4M