📘 Percorso didattico: stringhe, cicli e condizioni

Progressione consigliata:

  1. Scansione delle stringhe
  2. Errori tipici sulle variabili
  3. Versione corretta
  4. Confronti tra caratteri
  5. Accesso con indice e controllo limiti
  6. Uso completo di range()
  7. Condizioni numeriche combinate
  8. Disegni testuali con cicli

1 — Scansione di una stringa

(introduzione al ciclo for sulle stringhe)

s = input("inserisci stringa ")
l = int(input("Inserisci lunghezza stringa"))

for i in range(l):
    print(s[i])

for c in s:
    print(c)

2 — Errore: variabile non inizializzata

(errore logico fondamentale)

s = input("Inserisci stringa ")

for c in s:
    if c == 'a':
        conta += 1
print(conta)

3 — Errore: inizializzazione nel punto sbagliato

(la variabile viene azzerata ad ogni iterazione)

s = input("Inserisci stringa ")

for c in s:
    conta = 0
    if c == 'a':
        conta += 1
print(conta)

4 — Errore: stampa parziale

(output corretto ma nel punto sbagliato)

s = input("Inserisci stringa ")
conta = 0

for c in s:
    if c == 'a':
        conta += 1
        print(conta)

5 — Errore: stampa ad ogni iterazione

(il conteggio è giusto, ma l’output è fuorviante)

s = input("Inserisci stringa ")
conta = 0

for c in s:
    if c == 'a':
        conta += 1
    print(conta)

6 — Conteggio corretto dei caratteri

(versione giusta e pulita)

s = input("Inserisci stringa ")
conta = 0

for c in s:
    if c == 'a':
        conta += 1

print(conta)

7 — Lettere minuscole (uso di ord)

(introduzione ai codici ASCII)

s = input("Inserisci la stringa ")

for c in s:
    if ord(c) >= ord('a') and ord(c) <= ord('z'):
        print(c)

8 — Lettere minuscole (confronto diretto)

(versione più Pythonic e leggibile)

s = input("Inserisci la stringa ")

for c in s:
    if 'a' <= c <= 'z':
        print(c)

9 — Errore: accesso fuori indice

(classico errore con le stringhe)

s = input("Inserisci la stringa ")
l = int(input("Inserisci la sua lunghezza"))

for i in range(l):
    if s[i] == 'a':
        print(s[i+1])

10 — Successore di un carattere (versione corretta)

(controllo dei limiti)

s = input("Inserisci la stringa ")
l = int(input("Inserisci la sua lunghezza"))

for i in range(l):
    if s[i] == 'a' and i < l-1:
        print(s[i+1])

11 — Tutti gli usi di range()

(1, 2 e 3 parametri)

n = int(input("Inserisci il numero n "))

for i in range(n):
    print(i, end=' ')
print()

for i in range(n, 2*n):
    print(i, end=' ')
print()

for i in range(n, 2*n, 2):
    print(i, end=' ')
print()

for i in range(n, 0, -1):
    print(i, end=' ')

12 — Numeri con due condizioni

(divisibilità + ultima cifra)

n = int(input("Inserisci il numero massimo "))

for i in range(n+1):
    if i % 10 == 3 and i % 7 == 0:
        print(i)

13 — Ricerca numerica parametrica

(versione generalizzata)

n = int(input("Inserisci il numero massimo "))
cif = int(input("Inserisci l'ultima cifra "))
div = int(input("Inserisci il sottomultiplo "))

for i in range(n+1):
    if i % 10 == cif and i % div == 0:
        print(i)

14 — Disegno di una figura simmetrica

(uso avanzato dei cicli)

car = input("Inserisci carattere ")
larghezza = int(input("Inserisci larghezza "))

for i in range(1, larghezza+1):
    print(car*i)

for i in range(larghezza-1, 0, -1):
    print(car*i)

📌 Nota didattica (da docente a docente 😉)

Questo blocco è eccellente per la didattica perché:

  • mostra prima gli errori, poi la soluzione;

  • introduce il concetto di debug mentale;

  • prepara naturalmente a:

    • while
    • funzioni
    • stringhe come sequenze
    • controllo dei limiti (fondamentale per liste e array)