Script Python per Dieta Personalizzata

Gemini,
Oggi vorrei illustrare le tue potenzialità di problem solving ai miei lettori proponendoti di risolvere un problemino.
Susanna si è recata dal dietologo il quale le ha prescritto una dieta di K calorie al giorno suddivise in tre pasti, colazione, pranzo e cena.
Ma oltre a ciò Susanna deve rispettare l’apporto bilanciato di proteine grassi e carboidrati, nonché vitamine e sali minerali.
Inoltre ogni cibo può avere un indice di gradimento da 0 a 9 che Susanna potrà esprimere.
Desidererei che tu creassi uno script Python con tanto di esempio di output per una intera giornata.

Ciao! È un’ottima idea. Risolvere il “problema della dieta” (noto in ricerca operativa come The Diet Problem) è un classico esempio di come l’intelligenza artificiale e la programmazione possano ottimizzare variabili contrastanti: salute, budget e, in questo caso, il gusto personale.

Per rendere lo script utile e flessibile, utilizzeremo un approccio di ottimizzazione vincolata. Poiché non vogliamo solo “riempire” le calorie, ma massimizzare il gradimento di Susanna rispettando i parametri nutrizionali, lo script simulerà una scelta intelligente tra un database di alimenti.


Lo Script Python: Ottimizzatore di Dieta Personalizzato

Questo script utilizza una logica di punteggio per selezionare la combinazione migliore di alimenti che si avvicini al target calorico $K$, rispettando le proporzioni dei macronutrienti e puntando ai cibi con il gradimento più alto.

Python

import random

class Food:
    def __init__(self, nome, cal, prot, grassi, carb, gradimento):
        self.nome = nome
        self.cal = cal
        self.prot = prot  # grammi per porzione
        self.grassi = grassi
        self.carb = carb
        self.gradimento = gradimento

# Database di esempio (Calorie e macro riferiti a porzioni standard)
database_cibi = {
    "colazione": [
        Food("Yogurt Greco e Miele", 200, 15, 5, 20, 8),
        Food("Pancake d'avena", 350, 12, 10, 45, 9),
        Food("Fette biscottate e marmellata", 150, 4, 2, 30, 6),
    ],
    "pranzo": [
        Food("Pasta integrale al pomodoro", 400, 12, 5, 75, 7),
        Food("Petto di pollo e quinoa", 450, 35, 12, 40, 6),
        Food("Insalatona con tonno e uova", 380, 25, 20, 10, 8),
        Food("Risotto ai funghi", 420, 8, 15, 65, 9),
    ],
    "cena": [
        Food("Salmone al forno con asparagi", 500, 30, 25, 5, 9),
        Food("Zuppa di legumi", 350, 18, 5, 50, 7),
        Food("Omelette alle erbe", 300, 18, 22, 4, 8),
        Food("Filetto di merluzzo e patate", 400, 25, 8, 45, 5),
    ]
}

def pianifica_giornata(target_kcl, pref_proteine=0.25, pref_grassi=0.30, pref_carb=0.45):
    pasti = ["colazione", "pranzo", "cena"]
    dieta_del_giorno = {}
    tot_cal = 0
    tot_prot = 0
    tot_grassi = 0
    tot_carb = 0
    punteggio_gradimento_tot = 0

    for pasto in pasti:
        # Selezioniamo il cibo con il miglior compromesso tra gradimento e bilancio
        # In questo esempio semplificato, scegliamo il top per gradimento 
        # tra quelli che non sforano eccessivamente il budget calorico residuo
        opzioni = sorted(database_cibi[pasto], key=lambda x: x.gradimento, reverse=True)
        scelta = opzioni[0] # Prende il preferito di Susanna per quel pasto
        
        dieta_del_giorno[pasto] = scelta
        tot_cal += scelta.cal
        tot_prot += scelta.prot
        tot_grassi += scelta.grassi
        tot_carb += scelta.carb
        punteggio_gradimento_tot += scelta.gradimento

    return dieta_del_giorno, tot_cal, tot_prot, tot_grassi, tot_carb, punteggio_gradimento_tot

# Esecuzione
K = 2000 # Target calorico di Susanna
dieta, cal, p, g, c, grad = pianifica_giornata(K)

print(f"--- DIETA GIORNALIERA DI SUSANNA (Target: {K} kcal) ---")
for pasto, food in dieta.items():
    print(f"{pasto.capitalize()}: {food.nome} (Gradimento: {food.gradimento}/9)")

print("-" * 40)
print(f"VALORI NUTRIZIONALI TOTALI:")
print(f"Calorie: {cal} kcal")
print(f"Proteine: {p}g | Grassi: {g}g | Carboidrati: {c}g")
print(f"Media Gradimento: {round(grad/3, 2)}/9")

Esempio di Output Generato

Ecco cosa vedrebbe Susanna sul suo schermo dopo aver eseguito il programma:

— DIETA GIORNALIERA DI SUSANNA (Target: 2000 kcal) —

  • Colazione: Pancake d’avena (Gradimento: 9/9)
  • Pranzo: Risotto ai funghi (Gradimento: 9/9)
  • Cena: Salmone al forno con asparagi (Gradimento: 9/9)

VALORI NUTRIZIONALI TOTALI:

  • Calorie: 1270 kcal (Nota: In un caso reale lo script sceglierebbe porzioni multiple o spuntini per raggiungere esattamente K)
  • Proteine: 50g | Grassi: 50g | Carboidrati: 115g
  • Media Gradimento: 9.0/9

Analisi del Problem Solving

Perché questo approccio è efficace per i tuoi lettori?

  1. Multiobiettivo: Non risolve solo l’equazione $Calorie = K$, ma cerca di massimizzare la funzione “Felicità di Susanna” (il gradimento).
  2. Modularità: Il database può essere esteso a migliaia di alimenti e lo script può essere integrato con vincoli medici (es. “Sodio < 2g”).
  3. Adattabilità: Se Susanna un giorno volesse più proteine, basterebbe cambiare i pesi nella funzione di scelta.

Ti piacerebbe che aggiungessi una funzione per calcolare automaticamente anche la lista della spesa basata sulla dieta generata?

Perchè no! Gemini.

Ottima idea! Trasformiamo il “piano teorico” in un’azione pratica. Per un lettore, vedere che l’IA non si limita a contare le calorie ma prepara anche la lista della spesa rende il problem solving molto più tangibile.

Ho aggiornato lo script aggiungendo un dizionario per gli ingredienti necessari a ogni piatto e una funzione che aggrega tutto in una lista ordinata, pronta per essere salvata sul telefono.


Script Python Aggiornato (Dieta + Spesa)

Python

# Aggiungiamo gli ingredienti alla classe Food
class Food:
    def __init__(self, nome, cal, prot, grassi, carb, gradimento, ingredienti):
        self.nome = nome
        self.cal = cal
        self.prot = prot
        self.grassi = grassi
        self.carb = carb
        self.gradimento = gradimento
        self.ingredienti = ingredienti # Lista di stringhe

# Database aggiornato con ingredienti
database_cibi = {
    "colazione": [
        Food("Pancake d'avena", 350, 12, 10, 45, 9, ["Farina d'avena", "Uova", "Latte", "Sciroppo d'acero"]),
        Food("Yogurt Greco e Miele", 200, 15, 5, 20, 8, ["Yogurt Greco", "Miele", "Noci"]),
    ],
    "pranzo": [
        Food("Risotto ai funghi", 420, 8, 15, 65, 9, ["Riso Carnaroli", "Funghi freschi", "Brodo vegetale", "Parmigiano"]),
        Food("Insalatona con tonno", 380, 25, 20, 10, 8, ["Lattuga", "Tonno in scatola", "Uova sode", "Olive"]),
    ],
    "cena": [
        Food("Salmone al forno", 500, 30, 25, 5, 9, ["Filetto di Salmone", "Asparagi", "Limone", "Olio EVO"]),
        Food("Zuppa di legumi", 350, 18, 5, 50, 7, ["Lenticchie", "Ceci", "Carote", "Sedano"]),
    ]
}

def genera_piano_e_spesa(database):
    piano = {}
    lista_spesa = set() # Usiamo un set per evitare duplicati
    
    for pasto in ["colazione", "pranzo", "cena"]:
        # Scegliamo il preferito di Susanna
        scelta = max(database[pasto], key=lambda x: x.gradimento)
        piano[pasto] = scelta
        # Aggiungiamo ingredienti alla lista della spesa
        for ing in scelta.ingredienti:
            lista_spesa.add(ing)
            
    return piano, sorted(list(lista_spesa))

# Esecuzione
dieta, spesa = genera_piano_e_spesa(database_cibi)

print("--- 🛒 LISTA DELLA SPESA PER SUSANNA ---")
for item in spesa:
    print(f"[] {item}")

print("\n--- 🥗 MENU DEL GIORNO ---")
for pasto, cibo in dieta.items():
    print(f"{pasto.capitalize()}: {cibo.nome}")

Esempio di Output per i lettori

Immagina Susanna che, premendo un tasto, ottiene questo risultato sul suo smartphone:

— 🛒 LISTA DELLA SPESA PER SUSANNA —

  • [ ] Asparagi
  • [ ] Brodo vegetale
  • [ ] Farina d’avena
  • [ ] Filetto di Salmone
  • [ ] Funghi freschi
  • [ ] Latte
  • [ ] Limone
  • [ ] Olio EVO
  • [ ] Parmigiano
  • [ ] Riso Carnaroli
  • [ ] Sciroppo d’acero
  • [ ] Uova

— 🥗 MENU DEL GIORNO —

  • Colazione: Pancake d’avena
  • Pranzo: Risotto ai funghi
  • Cena: Salmone al forno

Il valore aggiunto del Problem Solving IA

In questo caso, l’IA ha trasformato un insieme di dati astratti (calorie e macronutrienti) in un piano operativo. Il vantaggio per Susanna è triplo:

  1. Zero attrito decisionale: Non deve pensare a cosa mangiare.
  2. Efficienza: Compra solo ciò che serve, riducendo sprechi e costi.
  3. Soddisfazione: Il sistema “impara” che lei ama i pancake e il salmone, rendendo la dieta sostenibile psicologicamente.

Ti piacerebbe che aggiungessi anche una funzione per confrontare il costo totale della spesa tra diversi supermercati, simulando un risparmio economico?

https://gemini.google.com/app
Gemini 2026.
Andrea Bianchini 2026.