1 — Trova il carattere massimo in una stringa

Versione originale: FunzMax

  • Definisce trovaLetteraMax() con ciclo for e if manuale.
  • Funziona correttamente ma può essere semplificata con max().

Versione Pythonica

# Legge una stringa e restituisce il carattere massimo
s = input("Inserisci stringa da analizzare: ")

# Pythonic: max() restituisce il massimo carattere in ordine ASCII
massimo = max(s) if s else None

if massimo:
    print("Carattere massimo:", massimo)
else:
    print("Stringa vuota!")

✅ Vantaggi:

  • Non serve inizializzare manualmente lmax.
  • Gestisce la stringa vuota in modo elegante.
  • Più compatto e leggibile.

2 — Scrivere numeri casuali su file

Versione originale: scriviNumeri

  • Usa open() e for.
  • Converte i numeri in stringa e aggiunge manualmente \n.

Versione Pythonica

import random

n = int(input("Quanti numeri generare? "))

# Scrittura sicura con with
with open("numeriCasuali.txt", "w") as f:
    for _ in range(n):
        f.write(f"{random.randint(0,100)}\n")

✅ Vantaggi:

  • with gestisce automaticamente chiusura del file.
  • Formattazione con f-string più leggibile.
  • _ come variabile dummy indica che l'indice non serve.

3 — Calcolare la media dei numeri in un file

Versione originale: calcolaMedia

  • Ciclo for con somma e conta.
  • Funziona bene, ma può essere più compatta usando comprehension o generatori.

Versione Pythonica

# Lettura dei numeri dal file
with open("numeriCasuali.txt", "r") as f:
    numeri = [int(riga.strip()) for riga in f if riga.strip().isdigit()]

if numeri:
    media = sum(numeri) / len(numeri)
    print("La media è:", media)
else:
    print("Il file è vuoto o non contiene numeri validi")

✅ Vantaggi:

  • Lista comprehension più compatta.
  • Filtra eventuali righe non numeriche.
  • Nessuna variabile contatore manuale richiesta.

4 — Suggerimento extra: versioni integrate

Possiamo combinare tutto in un unico script interattivo:

import random

# 1) Scrivere numeri casuali
n = int(input("Quanti numeri generare? "))
with open("numeriCasuali.txt", "w") as f:
    for _ in range(n):
        f.write(f"{random.randint(0,100)}\n")

# 2) Calcolare media
with open("numeriCasuali.txt", "r") as f:
    numeri = [int(r.strip()) for r in f if r.strip().isdigit()]

if numeri:
    print("La media è:", sum(numeri)/len(numeri))
else:
    print("File vuoto")

# 3) Trova il carattere massimo in input stringa
s = input("Inserisci stringa da analizzare: ")
if s:
    print("Carattere massimo:", max(s))
else:
    print("Stringa vuota!")

Mini-tool statistico Pythonico

# Statistiche complete dei numeri presenti in un file
# calcola somma, media, minimo e massimo
# gestione elegante con with e comprehension

FILE = "numeriCasuali.txt"

# Legge tutti i numeri interi dal file
with open(FILE, "r") as f:
    numeri = [int(r.strip()) for r in f if r.strip().isdigit()]

if numeri:
    totale = sum(numeri)
    media = totale / len(numeri)
    minimo = min(numeri)
    massimo = max(numeri)

    print(f"File: {FILE}")
    print(f"Numeri letti: {len(numeri)}")
    print(f"Somma: {totale}")
    print(f"Media: {media:.2f}")
    print(f"Minimo: {minimo}")
    print(f"Massimo: {massimo}")
else:
    print(f"Il file {FILE} è vuoto o non contiene numeri validi.")

✅ Caratteristiche Pythoniche

  1. with open(...) as f → gestione sicura dei file.
  2. List comprehension → lettura e conversione dei numeri in una riga.
  3. Funzioni built-insum(), min(), max() e len() per calcoli diretti.
  4. Controllo elegante per file vuoti o righe non numeriche.
  5. F-strings → stampa leggibile e compatta.
  6. Può essere esteso facilmente per altre statistiche (es. mediana, moda, deviazione standard).