Python: ciclo while infinito nonostante condizione di uscita

👤 Iniziato da @celiogreco33
📅 03/06/2025 10:01
📁 Programmazione 🌐 IT
Avatar di celiogreco33
Salve a tutti, ho un problema con un ciclo while in Python che non termina mai. Sto cercando di creare un contatore che arrivi a 10 e poi esca, ma sembra bloccarsi. Ecco il codice:

i = 0
while i != 10:
print(i)
# qui dimentico di incrementare i

Capisco che il ciclo non abbia un'istruzione di incremento 'i += 1', ma vorrei che qualcuno confermasse se sia l'unica causa, o se ci siano altri errori concettuali. Sto usando Python 3.12. Qualcuno ha suggerimenti per migliorare o alternative più efficaci? I loop in Python possono nascondere insidie... grazie a tutti per l'aiuto e buona serata! 🐱☕
Avatar di michel.palmieri690
Esatto, l’assenza di `i += 1` è proprio la causa del ciclo infinito: `i` resta sempre 0, quindi la condizione `i != 10` è sempre vera. È un errore classico, soprattutto quando si inizia a programmare. Però ti consiglio di usare una condizione più "pythonica" e meno soggetta a errori, tipo:

```python
i = 0
while i < 10:
print(i)
i += 1
```

In questo modo, anche se per sbaglio aumenti `i` di più o meno di 1, il ciclo si ferma comunque quando superi 9. Se vuoi un’alternativa super pulita e idiomatica, usa un ciclo `for`:

```python
for i in range(10):
print(i)
```

È più leggibile, meno incline a errori e più veloce da scrivere. Detesto quando vedo gente copiare cicli infiniti senza capire cosa fanno davvero; imparare bene queste basi è fondamentale, soprattutto in Python che punta alla chiarezza. Se vuoi, posso consigliarti qualche ottimo libro gratuito su Python open source!
Avatar di minaorlando79
Hai centrato il problema: senza `i += 1`, il ciclo non termina mai perché `i` resta a 0. Ma c’è un dettaglio in più da considerare: usare `!=` come condizione può nascondere rischi. Supponi, per sbaglio, di incrementare `i` di 2 ogni volta: se `i` supera 10 (es. 11), il ciclo continua all’infinito perché `11 != 10` è vero. Meglio usare `i < 10` o, ancora meglio, un ciclo `for`. Quest’ultimo non solo evita errori di incremento, ma comunica chiaramente l’intento: “fai qualcosa 10 volte”. E se devi rompere il ciclo in casi particolari? Usa `break`, ma solo se necessario. Per capire concetti come questi, ho trovato illuminante “Automate the Boring Stuff” (libero online). Python è magnifico, ma richiede attenzione alle piccole cose. Un errore banale può diventare un buon insegnante.
Avatar di petranegri
Ragazzi, avete già dato ottimi consigli, ma vorrei aggiungere un paio di cose. Innanzitutto, @celiogreco33, non scoraggiarti: è un errore comune, soprattutto per chi inizia. La programmazione richiede pratica e pazienza.

Detto questo, mi sento di consigliare di evitare il più possibile i cicli `while` quando si può usare un `for`. I cicli `for` sono più chiari e meno soggetti a errori, come avete già detto. Inoltre, se proprio dovete usare un `while`, assicuratevi di avere una condizione di uscita chiara e sicura.

Un altro consiglio: documentate il vostro codice. Anche se vi sembra ovvio ora, tra qualche settimana potreste dimenticare perché avete scritto quel ciclo in quel modo. E, ultimo ma non meno importante, non abbiate paura di chiedere aiuto. La comunità è qui per questo, e imparare dagli errori è parte del processo. Buona codifica a tutti!
Avatar di celiogreco33
@petranegri Grazie per i consigli! Il discorso sui `for` mi ha aperto gli occhi: in fondo, se devo contare fino a 10, partire con un range è più lineare. Sul documentare… be’, ammetto che spesso mi lancio nel codice come un gatto che insegue un topo, dimenticando i commenti. La prossima volta mi fermerò a scrivere due righe, magari sorseggiando un tè per non farmi prendere dall’ansia. E sì, il mio errore era proprio lì: il contatore non cresceva, bloccato in un loop senza fine, esattamente come quando il mio gatto rimane intrappolato in un angolo della stanza.

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!