Uso pratico di <strong>math</strong>, <strong>datetime</strong> e <strong>random</strong> pe

by theArchitect
SHARE
Uso pratico di <strong>math</strong>, <strong>datetime</strong> e <strong>random</strong> pe
© Guida-HTML5.it

Introduzione

Le librerie standard di Python sono uno dei suoi punti di forza più importanti: non serve installare nulla per iniziare a risolvere problemi reali in modo elegante. In questo tutorial vedremo come combinare math, datetime e random in un caso d’uso molto pratico: la creazione di un piccolo simulatore di scadenze e promemoria.

Immagina di dover gestire una lista di attività con date di consegna, priorità e tempi stimati. Un programma del genere può aiutarti a:

  • calcolare i giorni mancanti a una scadenza;
  • stimare un carico di lavoro usando operazioni matematiche;
  • assegnare una priorità casuale o simulata per testare il comportamento dell’applicazione;
  • generare date future in modo realistico.

Questo tipo di esercizio è utile non solo per imparare le librerie standard, ma anche per capire come costruire piccoli strumenti da usare in progetti più grandi: task manager, planner, software di test o prototipi di automazione.

Codice completo

from datetime import datetime, timedelta
import math
import random

# -----------------------------
# Configurazione iniziale
# -----------------------------

attivita = [
    {"nome": "Scrivere documentazione", "ore_stimate": 3.5},
    {"nome": "Revisionare codice", "ore_stimate": 2.2},
    {"nome": "Preparare demo", "ore_stimate": 4.8},
    {"nome": "Aggiornare test", "ore_stimate": 1.6},
]

# Data di partenza: oggi
oggi = datetime.now()

print("=== SIMULATORE DI SCADENZE E PROMEMORIA ===")
print(f"Data e ora attuale: {oggi.strftime(´%d/%m/%Y %H:%M´)}")
print()

# -----------------------------
# Elaborazione attività
# -----------------------------

for attivita_corrente in attivita:
    nome = attivita_corrente["nome"]
    ore = attivita_corrente["ore_stimate"]

    # Arrotondiamo sempre per eccesso al numero intero di ore
    ore_intere = math.ceil(ore)

    # Simuliamo un ritardo casuale tra 0 e 3 giorni
    ritardo_giorni = random.randint(0, 3)

    # Simuliamo anche un orario di consegna casuale tra 1 e 6 giorni da oggi
    giorni_base = random.randint(1, 6)
    scadenza = oggi + timedelta(days=giorni_base + ritardo_giorni)

    # Calcolo dei giorni mancanti alla scadenza
    giorni_mancanti = (scadenza - oggi).days

    # Generiamo un livello di priorità casuale, ma leggibile
    priorita = random.choice(["bassa", "media", "alta"])

    # Stima del carico totale: ore arrotondate + bonus casuale
    bonus = random.uniform(0.0, 1.5)
    carico_totale = round(ore_intere + bonus, 2)

    print(f"Attività: {nome}")
    print(f"  Ore stimate: {ore} -

Spiegazione

Vediamo con calma cosa fa il programma e perché è interessante dal punto di vista didattico.

1. Gestione delle date con datetime

La classe datetime permette di rappresentare data e ora correnti. Nel codice usiamo:

  • datetime.now() per ottenere l’istante attuale;
  • timedelta per aggiungere giorni a una data;
  • strftime() per formattare la data in modo leggibile.

Questa combinazione è molto comune nei programmi che devono lavorare con scadenze, log, report o pianificazioni.

2. Arrotondamenti con math

La libreria math è utile quando si vogliono eseguire operazioni numeriche precise. In questo esempio usiamo math.ceil(), che arrotonda sempre per eccesso.

Perché è utile? Se un’attività richiede 3.5 ore, spesso conviene considerarla come 4 ore nel planning, perché nella realtà ci sono sempre piccoli imprevisti. Questo è un esempio semplice ma realistico di come una funzione matematica possa migliorare la logica del programma.

3. Simulazione di variabilità con random

La libreria random serve per generare valori casuali. Nel nostro caso la usiamo in tre modi:

  • random.randint(0, 3) per simulare un ritardo in giorni;
  • random.choice([...]) per assegnare una priorità casuale;
  • random.uniform(0.0, 1.5) per aggiungere un piccolo bonus decimale al carico stimato.

Questo approccio è utile per testare applicazioni in scenari non deterministici. Ad esempio, un sistema di task management potrebbe dover gestire priorità e scadenze variabili.

4. Calcolo dei giorni mancanti

La differenza tra due oggetti datetime produce un intervallo temporale. Nel codice facciamo:

(scadenza - oggi).days

In questo modo otteniamo il numero di giorni mancanti alla scadenza. È una tecnica fondamentale per dashboard, notifiche e sistemi di promemoria.

5. Un piccolo esempio di automazione

La sezione finale crea un promemoria periodico a 14 giorni. Anche se il programma è semplice, la logica è già quella di un tool reale: prendi una data di partenza, aggiungi un intervallo e mostra il risultato in formato leggibile.

Best practice

Quando usi queste librerie in progetti veri, conviene seguire alcune buone pratiche:

  • Usa nomi chiari per le variabili: evita abbreviazioni poco comprensibili come x o tmp se il significato non è evidente.
  • Separa i dati dalla logica: in questo esempio la lista attivita è distinta dal codice che la elabora.
  • Formattazione coerente delle date: scegli sempre lo stesso formato, ad esempio %d/%m/%Y, per evitare confusione.
  • Usa math.ceil() quando il contesto richiede prudenza: è meglio sovrastimare leggermente che sottostimare un carico di lavoro.
  • Non abusare del caso: random è perfetto per simulazioni e test, ma non per logiche di business critiche senza controllo.
  • Rendi il codice estendibile: in un progetto più grande, conviene incapsulare la logica in funzioni, ad esempio una funzione per calcolare la scadenza e una per formattare il report.

Un altro consiglio importante: se vuoi risultati ripetibili durante i test, puoi impostare un seme casuale con random.seed(). In questo modo la sequenza generata sarà la stessa a ogni esecuzione, facilitando il debugging.

Riepilogo

In questo tutorial abbiamo costruito un piccolo simulatore di scadenze e promemoria usando tre librerie standard molto comuni:

  • datetime per gestire date e intervalli temporali;
  • math per arrotondare valori numerici in modo sensato;
  • random per introdurre variabilità e simulare scenari realistici.

Il vantaggio di questo approccio è che il codice resta semplice, leggibile e subito eseguibile. Inoltre, il progetto mostra un pattern utile: combinare moduli standard per costruire strumenti pratici senza dipendere da librerie esterne.

Se vuoi fare un passo in più, puoi trasformare questo esempio in una piccola applicazione che legge attività da file CSV, salva il report su disco o invia notifiche automatiche.

Approfondisci con risorse ufficiali

  • math — documentazione ufficiale Python: funzioni matematiche di base, arrotondamenti e costanti.
  • datetime — documentazione ufficiale Python: gestione di date, orari, differenze temporali e formattazione.
  • random — documentazione ufficiale Python: numeri casuali, scelte casuali e generazione di sequenze.

Le risorse ufficiali sono il punto di partenza migliore per approfondire: sono sempre aggiornate, precise e ricche di esempi affidabili. Se vuoi migliorare davvero come sviluppatore Python, imparare a consultarle con regolarità è un’abitudine che fa la differenza.

SHARE