Skip to content

ciclo while in Python (ciclo infinito, ecc.)

Python

Questo articolo descrive un ciclo (esecuzione ripetuta) che utilizza l’istruzione in Python.

A differenza dell’istruzione for, che recupera in sequenza elementi iterabili come list, mentre si ripete l’espressione condizionale è true.

In questo articolo vengono descritti i seguenti contenuti.

  • Utilizzo di base dell’istruzione in Python
  • Termina il ciclo:break
  • Continua al ciclo successivo:continue
  • Eseguire dopo la normale terminazione:else
  • Ciclo infinito con istruzione mentre
    • Termina con l’ingresso da tastiera
  • Cessazione forzata

Vedere il seguente articolo per la dichiarazione per. L’istruzione per è più appropriato quando si desidera ottenere un elemento come list o quando si desidera eseguire solo un certo numero di volte.

Invece di usare l’istruzione mentre, è possibile implementare un ciclo infinito usando l’istruzione per e le funzioni del modulo itertools della libreria standard. I cicli infiniti con contatori, ecc. possono essere scritti facilmente utilizzando le funzioni di itertools.

Utilizzo di base dell’istruzione in Python

L’istruzione in Python è scritta come segue:

while expression:
    ... <do something>

L’esempio specifico è il seguente.

i = 0

while i < 3:
    print(i)
    i += 1
# 0
# 1
# 2

È possibile specificare più condizioni per la parte dell’espressione con eo o.

Termina il ciclo:break

Usa pausa per terminare il ciclo mentre.

i = 0

while i < 3:
    print(i)
    if i == 1:
        print('!!BREAK!!')
        break
    i += 1
# 0
# 1
# !!BREAK!!

Continua al ciclo successivo:continue

Puoi saltare il ciclo e passare al successivo continuando.

break termina l’intero ciclo, ma continua salta il codice solo dopo l’istruzione continua nel ciclo.

while i < 3:
    if i == 1:
        print('!!CONTINUE!!')
        i += 1
        continue
    print(i)
    i += 1
# 0
# !!CONTINUE!!
# 2

Si noti che se si scrive il codice per una variabile utilizzata nell’espressione come i += 1 dopo continue, la variabile non verrà aggiornata e il ciclo non verrà terminato in modo imprevisto.

La risoluzione forzata è definita alla fine.

Eseguire dopo la normale terminazione:else

Usa else per eseguire qualcosa dopo che il ciclo è stato completato con successo.

i = 0

while i < 3:
    print(i)
    i += 1
else:
    print('!!FINISH!!')
# 0
# 1
# 2
# !!FINISH!!

Se il ciclo viene terminato per interruzione, la suite nella clausola else non viene eseguita.

i = 0

while i < 3:
    print(i)
    if i == 1:
        print('!!BREAK!!')
        break
    i += 1
else:
    print('!!FINISH!!')
# 0
# 1
# !!BREAK!!

In caso di continue, viene eseguita la suite nella clausola else.

i = 0

while i < 3:
    if i == 1:
        print('!!SKIP!!')
        i += 1
        continue
    print(i)
    i += 1
else:
    print('!!FINISH!!')
# 0
# !!SKIP!!
# 2
# !!FINISH!!

Ciclo infinito con istruzione mentre

Se l’espressione condizionale nell’istruzione mentre è sempre True, il ciclo non termina mai e l’esecuzione viene ripetuta all’infinito.

Nell’esempio seguente, il tempo UNIX viene acquisito da time.time() e il tempo trascorso viene misurato per impostare la condizione per l’interruzione.

import time

start = time.time()

while True:
    time.sleep(1)
    print('processing...')
    if time.time() - start > 5:
        print('!!BREAK!!')
        break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!

Ad esempio, un numero diverso da zero o una stringa non vuota è considerato True, quindi anche mentre 1:, ecc. risulterà in un ciclo infinito.

start = time.time()

while 1:
    time.sleep(1)
    print('processing...')
    if time.time() - start > 5:
        print('!!BREAK!!')
        break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!

Nel codice di esempio precedente viene utilizzato un ciclo infinito per la spiegazione, ma la stessa operazione può essere scritta senza un ciclo infinito come illustrato di seguito.

start = time.time()

while time.time() - start <= 5:
    time.sleep(1)
    print('processing...')
else:
    print('!!FINISH!!')
# processing...
# processing...
# processing...
# processing...
# processing...
# !!FINISH!!

Termina con l’ingresso da tastiera

Per terminare il ciclo infinito tramite l’input da tastiera invece di impostare l’interruzione, cattura KeyboardInterrupt con ctrl + c.

try:
    while True:
        time.sleep(1)
        print('processing...')
except KeyboardInterrupt:
    print('!!FINISH!!')

Se si preme ctrl + c dal terminale in esecuzione (Mac) o dal prompt dei comandi (Windows cmd.exe), il ciclo mentre viene terminato e viene eseguita la clausola exclude.

Vedere l’articolo seguente per la gestione delle eccezioni.

Cessazione forzata

Se sbagli impostando l’espressione condizionale, il processo potrebbe cadere inaspettatamente in un ciclo infinito e non finire mai.

Può essere interrotto forzatamente nei seguenti modi.

  • ctrl + c in un terminale in esecuzione
  • Termina il processo in Activity Monitor o Task Manager
    • Trova il nome del processo Python e uccidilo