Come emulare i loop Do-While in Python

In questo tutorial imparerai come emulare un ciclo do-while in Python.

In qualsiasi linguaggio di programmazione, i loop consentono di eseguire determinate azioni ripetutamente, a seconda di una condizione di loop. Python supporta i costrutti di ciclo while e for ma non supporta in modo nativo il ciclo do-while.

Tuttavia, puoi emulare un ciclo do-while comprendendo come funziona, utilizzando i cicli esistenti e le istruzioni di controllo del ciclo in Python.

Imparerai come farlo nei prossimi minuti. Cominciamo!

Che cos’è il costrutto ciclo Do-While?

Se hai programmato in linguaggi come C o C++, probabilmente ti saresti imbattuto nel costrutto del ciclo do-while.

In un ciclo do-while, l’insieme di istruzioni nel corpo del ciclo, all’interno del blocco delimitato da parentesi graffe, viene eseguito prima e quindi viene verificata la condizione di ciclo.

Puoi eseguire i seguenti esempi C nel compilatore C online di winadmin.it, direttamente dal tuo browser.

Considera il seguente frammento di codice:

//do_while_example1

#include <stdio.h>

int main() {
    int count = 1;
    printf("Do-While loop: n");
    
    do{
        printf("Loop runs...");
        }while(count<0);

    return 0;
}

Ecco l’output.

Output

Do-While loop: 
Loop runs...

Nell’esempio sopra:

  • Il valore di count è 1 e la condizione di loop è count < 0. Tuttavia, il loop viene eseguito una volta anche se la condizione di loop è inizialmente False.
  • Ciò è in contrasto con un ciclo while che viene eseguito solo se la condizione di ciclo è True in primo luogo.
//while_example1

#include <stdio.h>

int main() {
    int count = 1;
    printf("While loop: n");
    
    while(count<0){
        printf("Loop runs...");
        }

    return 0;
}

Come accennato, la condizione di ciclo, count < 0 è False inizialmente la variabile count viene inizializzata su 1. Quindi, dopo aver compilato ed eseguito il codice sopra, vediamo che l'istruzione nel corpo del ciclo while non viene eseguita.

Output

While loop: 
//loop body does not run!

While vs. Do-While: una panoramica delle differenze

Diamo un’occhiata più da vicino alle differenze tra i loop while e do-while.

Considera questo esempio:

//do_while_example2

#include <stdio.h>

int main() {
    int count = 1;
    printf("Do-while loop: n");
    
    do{
       printf("%dn",count);
       count++;
    }while(count<5);

    return 0;
}

Nella cella di codice sopra:

  • La variabile di conteggio viene inizializzata a 1.
  • Usiamo un ciclo do-while.
  • La variabile di conteggio viene incrementata di 1 durante ogni passaggio attraverso il ciclo e la condizione di ciclo viene impostata su un conteggio < 5.

Ecco una spiegazione visiva di come avviene l’esecuzione: come funziona il ciclo do-while e controlla la condizione di ciclo quattro volte.

Output

Do-while loop: 
1
2
3
4

Se invece usi un ciclo while, questo è quello che avremmo.

//while_example2

#include <stdio.h>

int main() {
    int count = 1;
    printf("While loop: n");
    
    while(count<5){
       printf("%dn",count);
       count++;
    };

    return 0;
}

La figura seguente spiega l’esecuzione del ciclo while; in questo esempio, il ciclo while controlla la condizione di ciclo cinque volte.

Output

While loop: 
1
2
3
4

Sebbene le uscite per i precedenti loop while e do-while siano identiche, ci sono alcune sottili differenze.

In un ciclo while, viene prima la condizione di controllo, seguita dal corpo del ciclo. Quindi, se vuoi che il ciclo esegua K volte, dovrebbero esserci esattamente K esecuzioni in cui la condizione di ciclo è True. Nell’iterazione numero K+1, la condizione diventa False e il controllo esce dal ciclo.

D’altra parte, se si utilizza un ciclo do-while: la condizione di ciclo viene verificata per la K-esima volta solo dopo che K è passato attraverso il ciclo.

Allora perché questo miglioramento marginale è utile?🤔

Supponiamo che la condizione di ciclo sia computazionalmente costosa: ad esempio, implica una chiamata a una funzione ricorsiva, un’operazione matematica complessa e così via.

In questi casi, per le ripetizioni K del corpo del ciclo, sarebbe invece utile utilizzare un ciclo do-while.

Riepilogo While vs. Do-While

Elenchiamo le differenze chiave che abbiamo appreso. 👩‍🏫

While LoopDo-While LoopCheck per la condizione di ciclo: prima dell’esecuzione del ciclo bodyCheck per la condizione di ciclo: dopo l’esecuzione del ciclo bodySe la condizione è inizialmente False, il corpo del ciclo non viene eseguito. Se la condizione è inizialmente False, il corpo del ciclo viene eseguita esattamente una volta. La condizione di loop viene verificata K volte per K passaggi attraverso il loop. La condizione di loop viene verificata K-1 volte per K passaggi attraverso il loop. Quando utilizzare il ciclo while?
– Il ciclo dovrebbe essere eseguito fintanto che la condizione è True
– Per loop controllati in ingresso
– Quando la condizione di loop non è computazionalmente onerosaQuando utilizzare un loop do-while?
– Il ciclo deve essere eseguito almeno una volta per una condizione di ciclo inizialmente False
– Per circuiti controllati in uscita
– Quando la condizione di loop è computazionalmente costosa

Emulazione del comportamento del ciclo Do-While in Python

Dalla sezione precedente, abbiamo le seguenti due condizioni per emulare il ciclo do-while:

  • Le istruzioni nel corpo del ciclo devono essere eseguite almeno una volta, indipendentemente dal fatto che la condizione di ciclo sia True o False.
  • La condizione deve essere verificata dopo l’esecuzione di istruzioni nel corpo del ciclo. Se la condizione è False, il controllo dovrebbe uscire dal ciclo: uscita dal controllo.

Infinite While Loop e Break Statement in Python

Puoi definire un ciclo while infinito in Python, come mostrato di seguito.

while True:
    pass

# Instead of True, you can have any condition that is always True

while always-True-condition:
   pass

L’istruzione break può essere utilizzata per uscire da un corpo del ciclo e trasferire il controllo alla prima istruzione al di fuori del corpo del ciclo.

while <condition>:
    if <some-condition>:
        break

Nel primo esempio di ciclo do-while in C, la condizione per continuare il ciclo è conteggio < 0. Quindi la condizione per uscire dal ciclo è un valore di conteggio pari a zero o maggiore di zero (conteggio >= 0).

Ecco l’emulazione del ciclo do-while in Python:

count = 1
while True:
    print("Loop runs...")
    if(count >= 0):
        break

Esempi di loop Do-While in Python

Rivisiteremo gli esempi della sezione precedente e li riscriveremo in Python emulando il ciclo do while.

# 1. Rivisitiamo l’esempio: stampare i valori della variabile count quando count è inferiore a cinque.

Sappiamo come definire un ciclo infinito in modo che il corpo del ciclo venga eseguito almeno una volta.

Il ciclo dovrebbe continuare finché il conteggio è inferiore a cinque. Pertanto, quando il conteggio raggiunge cinque, dovremmo uscire dal ciclo. Quindi count == 5 è la condizione di controllo dell’uscita.

Mettendolo insieme abbiamo:

count = 1
while True:
  print(f"Count is {count}")
  count += 1
  if count==5:
    break
Output

Count is 1
Count is 2
Count is 3
Count is 4

#2. Possiamo anche riscrivere il gioco di indovinare i numeri come un costrutto do-while di Python.

Nel gioco di indovinare i numeri, convalidiamo le ipotesi di un utente rispetto a un numero segreto predefinito. L’utente deve indovinare il numero segreto entro un certo numero di tentativi massimi consentiti, ad esempio max_guesses.

Il codice dovrebbe richiedere all’utente l’input, indipendentemente dal fatto che la sua ipotesi sia giusta o sbagliata. Possiamo farlo usando un ciclo while infinito.

Quindi, quando dovremmo uscire dal giro?

Il controllo dovrebbe uscire dal ciclo quando si verifica una delle seguenti condizioni:

  • Quando l’utente ha indovinato il numero
  • Quando l’utente non ha ancora indovinato il numero, ma ha esaurito il numero di ipotesi disponibili. Il numero di ipotesi errate da parte dell’utente = max_guesses.
  • La cella del codice qui sotto mostra come possiamo farlo.

    import random
    
    low, high = 5,50
    
    secret_number = random.choice(range(low,high))
    
    max_guesses = 10
    
    num_guesses = 0
    
    while True:
        guess = int(input("nGuess a number:"))
        num_guesses += 1
        
        conditions = [num_guesses==max_guesses,guess==secret_number]
        
        if any(conditions):
            break

    Invece di uscire dal ciclo, possiamo aggiungere istruzioni esplicative print() quando incontriamo ciascuna delle condizioni di cui sopra e poi uscire dal ciclo.

    import random
    
    low, high = 5,50
    
    secret_number = random.choice(range(low,high))
    
    print(secret_number)
    
    max_guesses = 10
    
    num_guesses = 0
    
    while True:
        guess = int(input("nGuess a number:"))
        num_guesses += 1
        
        if guess==secret_number:
            print("Congrats, you guessed it right!")
            break
        if num_guesses==max_guesses:
            print("Sorry, you have no more guesses left!")
            break

    Di seguito sono mostrati due output di esempio.

    In questo output di esempio, l’istruzione break interrompe il ciclo quando l’utente indovina correttamente il numero segreto.

    # Sample output when secret_number = 43 and user gets it right!
    
    Guess a number:4
    
    Guess a number:3
    
    Guess a number:43
    Congrats, you guessed it right!
    

    Ecco un altro esempio di output quando l’utente raggiunge il numero massimo di ipotesi disponibili ma non riesce a indovinare correttamente il numero segreto.

    # Sample output when secret_number = 33 and user fails to guess it right!
    
    Guess a number:3
    
    Guess a number:15
    
    Guess a number:21
    
    Guess a number:50
    
    Guess a number:17
    
    Guess a number:6
    
    Guess a number:18
    
    Guess a number:5
    
    Guess a number:12
    
    Guess a number:43
    Sorry, you have no more guesses left!

    Conclusione

    Spero che questo tutorial ti abbia aiutato a capire come emulare un ciclo do-while in Python.

    Ecco i punti chiave:

    • Utilizzare un ciclo infinito per garantire che il corpo del ciclo venga eseguito almeno una volta. Potrebbe essere un ciclo infinito banale come while True, o potrebbe essere while , in modo tale che la condizione sia sempre True.
    • Verificare la condizione di uscita all’interno del ciclo e utilizzare l’istruzione break per uscire dal ciclo in una condizione specifica.

    Quindi, impara come usare i cicli for e la funzione enumerate() in Python.