Πώς να προσομοιώσετε τους βρόχους Do-While στην Python

Σε αυτό το σεμινάριο, θα μάθετε πώς να μιμείτε έναν βρόχο do-while στην Python.

Σε οποιαδήποτε γλώσσα προγραμματισμού, οι βρόχοι σάς βοηθούν να εκτελείτε ορισμένες ενέργειες επανειλημμένα, ανάλογα με μια συνθήκη βρόχου. Η Python υποστηρίζει τις κατασκευές βρόχου while και for, αλλά δεν υποστηρίζει εγγενώς τον βρόχο do-while.

Ωστόσο, μπορείτε να μιμηθείτε έναν βρόχο do-while κατανοώντας πώς λειτουργεί — χρησιμοποιώντας υπάρχοντες βρόχους και δηλώσεις ελέγχου βρόχου στην Python.

Θα μάθετε πώς να το κάνετε αυτό μέσα στα επόμενα λεπτά. Ας ξεκινήσουμε!

Τι είναι η κατασκευή βρόχου Do-While;

Εάν έχετε προγραμματίσει σε γλώσσες όπως η C ή η C++, πιθανότατα θα συναντούσατε την κατασκευή του βρόχου do-while.

Σε έναν βρόχο do-while, το σύνολο των εντολών στο σώμα του βρόχου – εντός του μπλοκ που οριοθετείται από σγουρά άγκιστρα – εκτελούνται πρώτα και μετά ελέγχεται η συνθήκη βρόχου.

Μπορείτε να εκτελέσετε τα ακόλουθα παραδείγματα C στον διαδικτυακό μεταγλωττιστή C του grtechpc.org — απευθείας από το πρόγραμμα περιήγησής σας.

Εξετάστε το ακόλουθο απόσπασμα κώδικα:

//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;
}

Εδώ είναι η έξοδος.

Output

Do-While loop: 
Loop runs...

Στο παραπάνω παράδειγμα:

  • Η τιμή της καταμέτρησης είναι 1 και η συνθήκη βρόχου είναι μέτρηση < 0. Ωστόσο, ο βρόχος εκτελείται μία φορά ακόμα κι αν η συνθήκη βρόχου είναι αρχικά False.
  • Αυτό έρχεται σε αντίθεση με έναν βρόχο while που εκτελείται μόνο εάν η συνθήκη βρόχου είναι αρχικά True.
//while_example1

#include <stdio.h>

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

    return 0;
}

Όπως αναφέρθηκε, η συνθήκη βρόχου, count < 0 είναι False αρχικά η μεταβλητή count αρχικοποιείται σε 1. Έτσι, κατά τη μεταγλώττιση και εκτέλεση του παραπάνω κώδικα, βλέπουμε ότι η πρόταση στο σώμα του βρόχου while δεν εκτελείται.

Output

While loop: 
//loop body does not run!

Ενώ εναντίον Do-While: Μια επισκόπηση των διαφορών

Ας ρίξουμε μια πιο προσεκτική ματιά στις διαφορές μεταξύ των βρόχων while και do-while.

Εξετάστε αυτό το παράδειγμα:

//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;
}

Στο παραπάνω κελί κώδικα:

  • Η μεταβλητή count αρχικοποιείται σε 1.
  • Χρησιμοποιούμε έναν βρόχο do-while.
  • Η μεταβλητή count αυξάνεται κατά 1 κατά τη διάρκεια κάθε διέλευσης μέσω του βρόχου και η συνθήκη βρόχου ορίζεται να μετράει < 5.
  Ένας εισαγωγικός οδηγός και μελέτη περίπτωσης Google Cloud

Ακολουθεί μια οπτική εξήγηση του τρόπου εκτέλεσης της εκτέλεσης: πώς λειτουργεί ο βρόχος do-while και ελέγχει για τη συνθήκη βρόχου τέσσερις φορές.

Output

Do-while loop: 
1
2
3
4

Εάν χρησιμοποιείτε αντ ‘αυτού έναν βρόχο while, αυτό θα είχαμε.

//while_example2

#include <stdio.h>

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

    return 0;
}

Το παρακάτω σχήμα εξηγεί την εκτέλεση του βρόχου while. Σε αυτό το παράδειγμα, ο βρόχος while ελέγχει τη συνθήκη βρόχου πέντε φορές.

Output

While loop: 
1
2
3
4

Αν και οι έξοδοι για τους παραπάνω βρόχους while και do-while είναι πανομοιότυπες, υπάρχουν κάποιες ανεπαίσθητες διαφορές.

Σε ένα βρόχο while, ο έλεγχος για κατάσταση έρχεται πρώτος, ακολουθούμενος από το σώμα του βρόχου. Έτσι, εάν θέλετε ο βρόχος να εκτελείται K φορές, θα πρέπει να υπάρχουν ακριβώς K εκτελέσεις όπου η συνθήκη βρόχου είναι True. Στην επανάληψη με αριθμό K+1, η συνθήκη γίνεται False και το στοιχείο ελέγχου ξεφεύγει από τον βρόχο.

Από την άλλη πλευρά, εάν χρησιμοποιείτε έναν βρόχο do-while: η συνθήκη βρόχου ελέγχεται για την K-η φορά μόνο αφού το K περάσει από τον βρόχο.

Γιατί λοιπόν είναι χρήσιμη αυτή η οριακή βελτίωση;🤔

Ας υποθέσουμε ότι η συνθήκη βρόχου είναι υπολογιστικά ακριβή: για παράδειγμα, περιλαμβάνει μια κλήση σε μια αναδρομική συνάρτηση, μια σύνθετη μαθηματική πράξη, και ούτω καθεξής.

Σε τέτοιες περιπτώσεις, για K επαναλήψεις του σώματος του βρόχου, θα ήταν ωφέλιμο να χρησιμοποιηθεί ένας βρόχος do-while.

Σύνοψη while vs. Do-While

Ας καταγράψουμε τις βασικές διαφορές που μάθαμε. 👩‍🏫

Ενώ LoopDo-While LoopCheck για συνθήκη βρόχου: Πριν από την εκτέλεση του βρόχου bodyCheck for looping συνθήκη: Μετά την εκτέλεση του σώματος βρόχουΕάν η συνθήκη είναι αρχικά False, το σώμα του βρόχου δεν εκτελείται. Εάν η συνθήκη είναι αρχικά False, το σώμα του βρόχου εκτελείται ακριβώς μία φορά. Η συνθήκη βρόχου ελέγχεται K φορές για το K διέρχεται από τον βρόχο. Η συνθήκη βρόχου ελέγχεται K-1 φορές για το K περνά μέσα από τον βρόχο. Πότε να χρησιμοποιηθεί ο βρόχος while;
– Ο βρόχος πρέπει να εκτελείται εφόσον η συνθήκη είναι True
– Για βρόχους ελεγχόμενης εισόδου
– Όταν η συνθήκη βρόχου δεν είναι υπολογιστικά ακριβή Πότε να χρησιμοποιήσετε βρόχο do-while;
– Ο βρόχος πρέπει να εκτελείται τουλάχιστον μία φορά για μια συνθήκη αρχικά False looping
– Για ελεγχόμενους βρόχους εξόδου
– Όταν η συνθήκη βρόχου είναι υπολογιστικά ακριβή

  Τι είναι το Google Meet και πώς μπορείτε να το χρησιμοποιήσετε δωρεάν;

Εξομοίωση της συμπεριφοράς βρόχου Do-While στην Python

Από την προηγούμενη ενότητα, έχουμε τις ακόλουθες δύο συνθήκες για την εξομοίωση του βρόχου do-while:

  • Οι δηλώσεις στο σώμα του βρόχου θα πρέπει να εκτελούνται τουλάχιστον μία φορά—ανεξάρτητα από το αν η συνθήκη βρόχου είναι True ή False.
  • Η συνθήκη θα πρέπει να ελεγχθεί μετά την εκτέλεση εντολών στο σώμα του βρόχου. Εάν η συνθήκη είναι False, το στοιχείο ελέγχου θα πρέπει να ξεφύγει από τον βρόχο: έξοδος από τον έλεγχο.

Δήλωση Infinite while Loop και Break στην Python

Μπορείτε να ορίσετε έναν άπειρο βρόχο while στην Python, όπως φαίνεται παρακάτω.

while True:
    pass

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

while always-True-condition:
   pass

Η εντολή break μπορεί να χρησιμοποιηθεί για να ξεφύγει από ένα σώμα βρόχου και να μεταφέρει τον έλεγχο στην πρώτη εντολή έξω από το σώμα του βρόχου.

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

Στο πρώτο παράδειγμα βρόχου do-while στο C, η συνθήκη για να συνεχιστεί ο βρόχος είναι μέτρηση < 0. Άρα η συνθήκη για να ξεφύγουμε από τον βρόχο είναι μια τιμή μέτρησης μηδέν ή μεγαλύτερη από μηδέν, (count >= 0).

Ακολουθεί η εξομοίωση του βρόχου do-while στην Python:

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

Παραδείγματα βρόχου Python Do-While

Θα επανεξετάσουμε τα παραδείγματα από την προηγούμενη ενότητα και θα τα ξαναγράψουμε στην Python προσομοιώνοντας το do while loop.

#1. Ας ξαναδούμε το παράδειγμα: εκτύπωση των τιμών της μεταβλητής count όταν ο αριθμός είναι μικρότερος από πέντε.

Ξέρουμε πώς να ορίσουμε έναν άπειρο βρόχο έτσι ώστε το σώμα του βρόχου να εκτελείται τουλάχιστον μία φορά.

Το looping θα πρέπει να συνεχιστεί όσο η μέτρηση είναι μικρότερη από πέντε. Επομένως, όταν ο αριθμός φτάσει στο πέντε, θα πρέπει να ξεφύγουμε από τον βρόχο. Άρα το count == 5 είναι η συνθήκη ελέγχου εξόδου.

Συνδυάζοντας το έχουμε:

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. Μπορούμε επίσης να ξαναγράψουμε το παιχνίδι εικασίας αριθμών ως κατασκευή Python do-while.

  Διορθώστε το πρόβλημα διαχείρισης ενέργειας της Διαχείρισης Συσκευών

Στο παιχνίδι εικασίας αριθμών, επικυρώνουμε τις εικασίες ενός χρήστη έναντι ενός προκαθορισμένου μυστικού αριθμού. Ο χρήστης θα πρέπει να μαντέψει τον μυστικό αριθμό εντός ενός συγκεκριμένου αριθμού μέγιστων επιτρεπόμενων προσπαθειών, ας πούμε, max_guesses.

Ο κώδικας θα πρέπει να ζητά από τον χρήστη να εισάγει, ανεξάρτητα από το αν η εικασία του είναι σωστή ή λάθος. Μπορούμε να το κάνουμε αυτό χρησιμοποιώντας έναν άπειρο βρόχο while.

Πότε λοιπόν πρέπει να ξεφύγουμε από τον βρόχο;

Το στοιχείο ελέγχου πρέπει να ξεφύγει από τον βρόχο όταν συμβεί οποιοδήποτε από τα ακόλουθα:

  • Όταν ο χρήστης έχει μαντέψει τον αριθμό
  • Όταν ο χρήστης δεν έχει μαντέψει ακόμα τον αριθμό, αλλά έχει εξαντλήσει τον αριθμό των διαθέσιμων εικασιών. Ο αριθμός των εσφαλμένων εικασιών από τον χρήστη = max_guesses.
  • Το κελί κώδικα παρακάτω δείχνει πώς μπορούμε να το κάνουμε.

    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

    Αντί να ξεφύγουμε από τον βρόχο, μπορούμε να προσθέσουμε επεξηγηματικές δηλώσεις print() όταν αντιμετωπίζουμε καθεμία από τις παραπάνω συνθήκες και στη συνέχεια να βγούμε από τον βρόχο.

    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

    Δύο δείγματα εξόδων φαίνονται παρακάτω.

    Σε αυτό το δείγμα εξόδου, η εντολή break βγαίνει από τον βρόχο όταν ο χρήστης μαντέψει σωστά τον μυστικό αριθμό.

    # 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!
    

    Ακολουθεί ένα άλλο δείγμα εξόδου όταν ο χρήστης φτάσει τον μέγιστο αριθμό διαθέσιμων εικασιών, αλλά δεν καταφέρνει να μαντέψει σωστά τον μυστικό αριθμό.

    # 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!

    συμπέρασμα

    Ελπίζω αυτό το σεμινάριο να σας βοήθησε να καταλάβετε πώς να μιμηθείτε έναν βρόχο do-while στην Python.

    Εδώ είναι τα βασικά συμπεράσματα:

    • Χρησιμοποιήστε έναν άπειρο βρόχο για να διασφαλίσετε ότι το σώμα του βρόχου λειτουργεί τουλάχιστον μία φορά. Θα μπορούσε να είναι ένας τετριμμένος άπειρος βρόχος, όπως while True, ή θα μπορούσε να είναι while , έτσι ώστε η συνθήκη να είναι πάντα True.
    • Ελέγξτε για την κατάσταση εξόδου μέσα στον βρόχο και χρησιμοποιήστε τη δήλωση break για να βγείτε από τον βρόχο κάτω από μια συγκεκριμένη συνθήκη.

    Στη συνέχεια, μάθετε πώς να χρησιμοποιείτε βρόχους for και τη συνάρτηση enumerate() στην Python.