📘 Esercizi sul ciclo while, ripetizione controllata e accumulo

Questi esercizi introducono il ciclo while, mostrando:

  • come ripetere operazioni finché una condizione rimane vera;
  • come usare variabili booleane di controllo;
  • come usare break per interrompere deliberatamente un ciclo infinito;
  • come accumulare valori tramite somma progressiva;
  • come costruire conversioni numeriche bit-per-bit;
  • come gestire giochi o flussi di input a ripetizione.

Ogni esempio mostra una variante diversa del controllo del ciclo, aumentando gradualmente la complessità.


Esempio 1 — Es6While (while True + break, conversione da binario a decimale)

# Programma che legge una sequenza di 8 bit, la converte in decimale e poi
# chiede all'utente se vuole continuare.
# È una versione ampliata di Es6, con ciclo while True e break.

while True:
    bits = input("Inserisci sequenza di 8 bit ")
    somma = 0
    for i in range(8):
        bit = int(bits[i])
        somma += bit * 2**(7-i)

    print(somma)

    ancora = input("Esegui ancora? (S/N) ")
    if ancora == "N":
        break

Esempio 2 — Es7 (gioco della morra cinese con punteggio)

# Programma che gioca alla morra cinese fino a quando uno dei giocatori
# raggiunge un certo numero di vittorie.

numpartite = int(input("Inserisci numero vittorie da raggiungere "))
v1 = 0  # Vittorie giocatore 1
v2 = 0  # Vittorie giocatore 2

while (v1 < numpartite) and (v2 < numpartite):
    g1 = input("Inserisci mossa giocatore 1 ")
    g2 = input("Inserisci mossa giocatore 2 ")

    if g1 == "S" and g2 == "S":
        print("Patta")
    elif g1 == "S" and g2 == "C":
        print("Vince il giocatore 2")
        v2 += 1
    elif g1 == "S" and g2 == "F":
        print("Vince il giocatore 1")
        v1 += 1
    elif g1 == "C" and g2 == "S":
        print("Vince il giocatore 1")
        v1 += 1
    elif g1 == "C" and g2 == "C":
        print("Patta")
    elif g1 == "C" and g2 == "F":
        print("Vince il giocatore 2")
        v2 += 1
    elif g1 == "F" and g2 == "S":
        print("Vince il giocatore 2")
        v2 += 1
    elif g1 == "F" and g2 == "C":
        print("Vince il giocatore 1")
        v1 += 1
    elif g1 == "F" and g2 == "F":
        print("Patta")

print("Vittorie del giocatore 1:", v1, "Vittorie del giocatore 2:", v2)

Esempio 3 — Es6 (conversione da binario a decimale, versione base)

# Programma che legge una sequenza di 8 bit e la converte in decimale.

bits = input("Inserisci sequenza di 8 bit ")

somma = 0

for i in range(8):
    bit = int(bits[i])
    somma += bit * 2**(7-i)

print(somma)

Esempio 4 — while1 (differenza tra while e for)

# Programma che somma i numeri da 1 a n usando prima un while e poi un for.

n = int(input("Inserisci valore massimo n "))

somma = 0
i = 1

while i <= n:
    somma += i
    i = i + 1

print(somma)

somma = 0
for i in range(1, n+1):
    somma += i

print(somma)

Esempio 5 — while3 (somma con richiesta esplicita: S/N)

# Programma che somma una sequenza di numeri.
# Dopo ogni numero chiede se continuare.

somma = 0
finito = False

while not finito:
    numero = int(input("Inserisci numero "))
    somma += numero
    continua = input("Continua ? (S/N) ")
    if continua == "N":
        finito = True

print(somma)

Esempio 6 — while4 (ciclo infinito con break)

# Variante del precedente: usa while True + break.

somma = 0

while True:
    numero = int(input("Inserisci numero "))
    somma += numero
    continua = input("Continua ? (S/N) ")
    if continua == "N":
        break

print(somma)

Esempio 7 — while2 (terminazione quando si inserisce 0)

# Programma che somma numeri finché non viene inserito lo 0.

somma = 0
finito = False

while not finito:
    numero = int(input("Inserisci numero, 0 per finire "))
    if numero == 0:
        finito = True
    else:
        somma += numero

print(somma)