📘 Percorso didattico: file e stringhe

Questi esempi Python introducono:

  • la lettura e scrittura di file riga per riga;
  • la scansione di stringhe e trasformazione di caratteri;
  • due approcci per trasformare la prima lettera dopo ogni spazio in maiuscolo.

1 — Leggere e scrivere file (creaFile)

# Apertura del file in modalità lettura/scrittura
f = open("readMe.txt", "r+")

# Lettura della prima riga
line = f.readline()

# Ciclo che legge riga per riga fino alla fine del file
while line != "":
    line = f.readline()

# Scrittura in coda al file
f.write("Prima riga Appesa\n")
f.write("Seconda riga Appesa\n")

# Chiusura del file per rendere permanenti le scritture
f.close()

# Riapertura del file in modalità lettura
f = open("readMe.txt", "r")

# Lettura e stampa dell'intero contenuto del file
print(f.read())
f.close()

# Riapertura del file in modalità lettura
f = open("readMe.txt", "r")

# Metodo alternativo: lettura riga per riga con for
for line in f:
    print(line)
f.close()

📌 Concetti chiave

  • Apertura/chiusura file (open, close)
  • Lettura riga per riga (readline o for line in file)
  • Scrittura in coda al file (write)

2 — Maiuscolo con ciclo for (maiuscolo)

# Trasforma in maiuscolo la prima lettera dopo ogni spazio
stringa = input("Inserisci la stringa: ")

# Trasformo il primo carattere
nuova = stringa[0].upper()

# Scansione della stringa
for i in range(len(stringa)-1):
    if stringa[i] == " ":
        # Carattere successivo maiuscolo
        nuova = nuova + stringa[i+1].upper()
    else:
        # Carattere successivo così com'è
        nuova = nuova + stringa[i+1]

print("La vecchia stringa è", stringa)
print("La nuova stringa è", nuova)

📌 Concetti chiave

  • Scansione della stringa con indice
  • Uso di if per rilevare spazi
  • Costruzione di una nuova stringa

3 — Maiuscolo con while e find (maiuscoloConFind)

# Trasforma in maiuscolo la prima lettera dopo ogni spazio
# soluzione alternativa con find() e while

stringa = input("Inserisci la stringa: ")

# Trasformo il primo carattere
nuova = stringa[0].upper()

# Copio la stringa in una variabile temporanea
temp = stringa

# Trova la posizione del primo spazio
i = temp.find(" ")

# Ripeti finché ci sono spazi
while i != -1:
    # Parte prima dello spazio (senza modifiche)
    prefix = temp[1:i]

    # Parte dopo lo spazio
    suffix = temp[i+1:]

    # Concateno: prefix + spazio + primo carattere maiuscolo della parte restante
    nuova = nuova + prefix + " " + suffix[0].upper()

    # Aggiorno temp
    temp = suffix

    # Trova prossimo spazio
    i = temp.find(" ")

# Aggiungo eventuali restanti caratteri
nuova = nuova + temp[1:]

print("La vecchia stringa è", stringa)
print("La nuova stringa è", nuova)

📌 Concetti chiave

  • Uso di find() per cercare spazi
  • Ciclo while controllato da condizione
  • Manipolazione avanzata di sottostringhe

Maiuscolo Pythonico

Ecco una versione Pythonica, chiara e compatta, che realizza lo stesso effetto (prima lettera di ogni parola in maiuscolo) senza cicli complessi o find(), usando split() e join():

# Trasforma in maiuscolo la prima lettera di ogni parola
stringa = input("Inserisci la stringa: ")

# Divido la stringa in parole
parole = stringa.split(" ")

# Trasformo la prima lettera di ogni parola in maiuscolo
parole_maiuscole = [p[0].upper() + p[1:] if p else "" for p in parole]

# Ricompongo la stringa
nuova = " ".join(parole_maiuscole)

print("La vecchia stringa è:", stringa)
print("La nuova stringa è:", nuova)

Vantaggi di questa versione

  • Molto più leggibile: un ciclo for compatto (list comprehension).
  • Evita manipolazioni complicate di indici e sottostringhe.
  • Gestisce anche eventuali spazi consecutivi senza errori (if p else "").

Confronto Tre Versioni — Capitalizzazione Parole

# ==========================================================
# VERSIONE 1: Ciclo for con indici
# ==========================================================
print("=== Versione 1: For con indici ===")
stringa1 = input("Inserisci una stringa: ")
nuova1 = stringa1[0].upper()  # prima lettera maiuscola

for i in range(len(stringa1)-1):
    if stringa1[i] == " ":
        nuova1 += stringa1[i+1].upper()
    else:
        nuova1 += stringa1[i+1]

print("Risultato:", nuova1)
print()

# ==========================================================
# VERSIONE 2: Ciclo while con find()
# ==========================================================
print("=== Versione 2: While con find() ===")
stringa2 = input("Inserisci una stringa: ")
nuova2 = stringa2[0].upper()
temp = stringa2
i = temp.find(" ")

while i != -1:
    prefix = temp[1:i]
    suffix = temp[i+1:]
    nuova2 = nuova2 + prefix + " " + suffix[0].upper()
    temp = suffix
    i = temp.find(" ")

nuova2 += temp[1:]  # aggiunge eventuali restanti caratteri
print("Risultato:", nuova2)
print()

# ==========================================================
# VERSIONE 3: Pythonica con split() e join()
# ==========================================================
print("=== Versione 3: Pythonica ===")
stringa3 = input("Inserisci una stringa: ")
parole = stringa3.split(" ")
parole_maiuscole = [p[0].upper() + p[1:] if p else "" for p in parole]
nuova3 = " ".join(parole_maiuscole)
print("Risultato:", nuova3)

Commento didattico

Versione Caratteristiche Pro / Contro
For con indici Scorre la stringa carattere per carattere Leggibile, ma un po’ verboso; bisogna gestire manualmente gli indici
While + find Cerca spazi e ricostruisce la stringa Più complessa, difficile da leggere; utile come esercizio di manipolazione stringhe
Pythonica Usa split(), list comprehension e join() Più compatta, leggibile, robusta; approccio consigliato in Python moderno