Μετάβαση στο κύριο περιεχόμενο

Μάθημα 2: Χρήση βρόχου While

Σε αυτό το μάθημα, θα δημιουργήσετε ένα έργο χρησιμοποιώντας τον Αισθητήρα Bumper και τον βρόχο while. Στη μίνι-πρόκληση, θα εφαρμόσετε αυτές τις δεξιότητες για να πλοηγηθείτε από την αρχή του Λαβύρινθου του Τοίχου μέχρι το γράμμα «Α».

Η παιδική χαρά Wall Maze δεν δείχνει το ταμπλό της. Το ρομπότ εικονικής πραγματικότητας έχει έναν τοίχο μπροστά του τον οποίο αγγίζει, γεγονός που υποδεικνύει ότι θα πρέπει να γυρίσει για να μπορέσει να προχωρήσει στον λαβύρινθο.

Μαθησιακά Αποτελέσματα

  • Προσδιορίστε ότι οι εντολές που δεν βρίσκονται σε αναμονή έχουν ως αποτέλεσμα τη συνέχιση του έργου, ακόμη και αν η συμπεριφορά της εντολής δεν έχει ολοκληρωθεί ακόμη.
  • Προσδιορίστε ότι μια εντολή αναμονής ολοκληρώνει τη συμπεριφορά πριν συνεχίσετε στο έργο.
  • Προσδιορίστε ότι ο βρόχος whileθα ελέγχει επανειλημμένα μια Boolean συνθήκη και δεν θα μετακινηθεί στην επόμενη εντολή μέχρι η συνθήκη να αναφέρει True.
  • Προσδιορίστε ότι ο βρόχος whileχρησιμοποιείται με εντολές που δεν βρίσκονται σε αναμονή (π.χ. drive) για τον έλεγχο της κατάστασης του αισθητήρα.
  • Προσδιορίστε ότι η λέξη-κλειδί όχιαντιστρέφει την τιμή μιας Boolean συνθήκης από True σε False ή False σε True. 
  • Προσδιορίστε ότι οι εντολές left_bumper.pressedκαι right_bumper.pressedεπιστρέφουν τιμή True ή False σε έναν βρόχο while.
  • Περιγράψτε πώς να δημιουργήσετε ένα έργο που έχει ένα ρομπότ εικονικής πραγματικότητας να κινείται προς τα εμπρός μέχρι να πατηθεί ο αισθητήρας προφυλακτήρα.

Βρόχοι While

Ο βρόχος ενώ δέχεται λογικές συνθήκες. Ενώ οι βρόχοιελέγχουν επανειλημμένα μια λογική συνθήκη και ελέγχουν τη ροή του έργου. Ο βρόχος ενώθα συνεχίσει να επαναλαμβάνεται εφόσον η συνθήκη είναι& True. Ο βρόχος while θα τερματίσει τον βρόχο και θα μετακινηθεί στην επόμενη εντολή εκτός του βρόχου μόλις η συνθήκη αναφερθεί ως False.

Το VEXcode VR Python Toolbox. Η εντολή while επισημαίνεται με κόκκινο χρώμα, με ένα βέλος που δείχνει προς τη διεπαφή κωδικοποίησης. Ο κώδικας διαβάζει def main():, while condition:, wait(5, MSEC) αφού η εντολή while μεταφέρθηκε από την εργαλειοθήκη στη διεπαφή κωδικοποίησης.

Ουσιαστικά, ένας βρόχοςενώλέει στο ρομπότ εικονικής πραγματικότητας να συνεχίσει να εκτελεί μια συμπεριφοράενώπληρούται μια συγκεκριμένη συνθήκη. Η λογική είναι παρόμοια με αυτό το σενάριο:Ενώλάμπει ο ήλιος, πήγαινε να παίξεις έξω.Τι θα έκανες; Η συνθήκη «ο ήλιος λάμπει» καθορίζει πού πρέπει να βρίσκεστε. Όταν ο ήλιος λάμπει, η συνθήκη είναι αληθής, οπότε πηγαίνεις να παίξεις έξω. Όταν δύει ο ήλιος, η συνθήκη είναι Ψευδής, άρα θα επιστρέψετε μέσα.

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

While Loops και το πρόβλημα του λαβυρίνθου του τοίχου

Η ίδια λογική ισχύει και για το ρομπότ εικονικής πραγματικότητας (VR) στον λαβύρινθο του τοίχου. Ενώ ο αισθητήρας προφυλακτήραδεν είναι πατημένος, το ρομπότ εικονικής πραγματικότητας θα πρέπει να συνεχίσει να κινείται προς τα εμπρός. Όταν πατηθεί, θα πρέπει να σταματήσει ή να περιστραφεί. Χρησιμοποιώντας βρόχουςwhileσε συνδυασμό με εντολές που δεν αναμένουν, όπως drive, μπορούμε να προγραμματίσουμε το ρομπότ VR να κάνει ακριβώς αυτό. Ωστόσο, οι εντολές του Αισθητήρα Προφυλακτήρα χρησιμοποιούν την συνθήκη του πατημένου Αισθητήρα Προφυλακτήρα (left_bumper.pressedή right_bumper.pressed)Για να προγραμματίσουμε το Ρομπότ Εικονικής Πραγματικότητας να οδηγεί ενώ ο Αισθητήρας Προφυλακτήρα είναι πατημένοςκαι όχι, πρέπει να χρησιμοποιήσουμε έναν τελεστήκαι όχι.

def main():
	ενώ δεν συνθήκη:
		αναμονή (5, MSEC)

Για την ενημέρωσή σας

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

Εντολές αναμονής

μετάδοσης κίνησης.drive_for(ΜΠΡΟΣΤΑ, 200, MM)
μετάδοσης κίνησης.turn_for(ΔΕΞΙΑ, 90, ΜΟΙΡΕΣ)

Εντολές που δεν αναμένουν

σύστημα μετάδοσης κίνησης.κίνηση (ΜΠΡΟΣΤΑ)
σύστημα μετάδοσης κίνησης.στροφή (ΔΕΞΙΑ)

Η λέξη-κλειδί "όχι"

Η λέξη-κλειδίόχιθα χρησιμοποιείται συνήθως με τους βρόχουςενώ, για να εκτελούνται οι εντολές μέσα στον βρόχο ενώ η συνθήκη επιστρέφει False. Για να χρησιμοποιήσουμε το παράδειγμα «ο ήλιος λάμπει», το ίδιο αποτέλεσμα μπορεί να επιτευχθεί χρησιμοποιώντας έναν τελεστήόχι. Όσο ο ήλιος, έλα μέσα

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

Στον Λαβύρινθο του Τοίχου, αυτό είναι χρήσιμο ώστε να μπορέσουμε να προγραμματίσουμε το Ρομπότ Εικονικής Πραγματικότητας έτσι ώστε ενώ ο Αισθητήρας Προφυλακτήρα είναι πατημένοςκαι όχι, να κινείται προς τα εμπρός. Η συνθήκη εξακολουθεί να είναι «εάν πατηθεί ο Αισθητήρας Προφυλακτήρα», αλλά με αυτόν τον τρόπο, όταν αναφέρει False (δεν έχει πατηθεί), η ροή του έργου παραμένει στον βρόχο. Όταν πατηθεί ο Αισθητήρας Προφυλακτήρα, η συνθήκη είναι True, επομένως το έργο θα βγει από τον βρόχο.Ένα διάγραμμα ροής έργου που περιγράφει τη ροή ενός έργου με μια δομή while not. Στα αριστερά, το έργο στον κύριο ορισμό διαβάζεται ως εντολή "ενώ δεν είναι πατημένος ο προφυλακτήρας αριστερά, με κίνηση προς τα εμπρός και αναμονή 5 χιλιοστών του δευτερολέπτου" μέσα στον βρόχο. Έξω από τον βρόχο υπάρχει μια εντολή διακοπής. Στα δεξιά, η ροή του έργου που απεικονίζεται με ένα κυκλικό κόκκινο βέλος αναφέρει ότι ενώ ο προφυλακτήρας δεν είναι πατημένος, η συνθήκη επιστρέφει την τιμή false και το ρομπότ κινείται προς τα εμπρός. Στη συνέχεια, ένα ευθύ πράσινο βέλος δείχνει προς τα κάτω, υποδεικνύοντας ότι όταν πατηθεί ο προφυλακτήρας, η συνθήκη επιστρέφει true και το έργο βγαίνει από τον βρόχο, προκαλώντας τη διακοπή της οδήγησης του ρομπότ.

Για την ενημέρωσή σας

Η λέξη-κλειδί όχι είναι ένας λογικός τελεστής που αντιστρέφει την τιμή μιας Boolean τιμής. Η τοποθέτηση της λέξης-κλειδιούόχιμπροστά από μια εντολή που επιστρέφει μια Boolean τιμή θα αντιστρέψει την τιμή True σε False και την τιμή False σε True. Για παράδειγμα, φανταστείτε ότι πατάτε τον Αισθητήρα Αριστερού Προφυλακτήρα στο Ρομπότ VR και η εντολή left_bumper.pressedεπιστρέφει True. Η λέξη-κλειδίόχιθα αντιστρέψει την τιμή Boolean και θα κάνει αυτήν την έκφραση να επιστρέψει False.

δεν είναι left_bumper.pressed()

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

def main():
	ενώ δεν είναι left_bumper.pressed():
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

Δημιουργία έργου με βρόχοWhile και τον αισθητήρα προφυλακτήρα

Ονομάστε και αποθηκεύστε το έργο

  • Ανοίξτε ένα νέο έργο κειμένου και επιλέξτε τοWall Maze Playgroundόταν σας ζητηθεί. Το πλακίδιο επιλογής Παιδικής Χαράς με Τοίχο Λαβύρινθο γράφει «Τοίχος Λαβύρινθος» στο κάτω μέρος και δείχνει τον λαβύρινθο από πάνω.
  • Ονομάστε το έργο Μονάδα4Μάθημα2.Η γραμμή εργαλείων VEXcode VR. Το Όνομα Έργου στη μέση της Γραμμής Εργαλείων αναφέρει Ενότητα 4 Μάθημα 2 και επισημαίνεται με κόκκινο πλαίσιο.

     

  • Σύρετε ή πληκτρολογήστε την εντολή whileστον χώρο εργασίας για να αντικαταστήσετε την εντολή Drivetrain που συμπληρώνεται αυτόματα ως μέρος ενός νέου έργου κειμένου. Παρατηρήστε ότι υπάρχει μια εντολή wait μέσα στον βρόχο. Μην καταργήσετε την εντολή wait, καθώς θα διασφαλίσει ότι το ρομπότ εικονικής πραγματικότητας (VR) θα εκτελέσει το έργο σωστά. Το έργο σας θα πρέπει να μοιάζει με αυτό:

    def main():
    	ενώ συνθήκη:
    		αναμονή(5, MSEC)
  • Πληκτρολογήστε έναν τελεστήόχιμετά το 'while' στην εντολήwhile. Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:

    def main():
    	ενώ δεν είναι συνθήκη:
    		αναμονή(5, MSEC)
  • Σύρετε ή πληκτρολογήστε την εντολή left_bumper.pressedστη «συνθήκη» του βρόχου while. Οι εντολές εντός του βρόχου θα εκτελούνται όταν η συνθήκη δεν είναι True, δηλαδή όταν ο Αισθητήρας Αριστερού Προφυλακτήρα είναι πατημένοςκαι όχι. Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:

    def main():
    	ενώ δεν είναι left_bumper.pressed():
    		αναμονή(5, MSEC)
  • Μέσα στον βρόχο while, σύρετε ή πληκτρολογήστε την εντολή drive. Βεβαιωθείτε ότι η εντολήdriveκαι η εντολήwaitέχουν τοποθετηθεί σωστά μέσα στον βρόχοwhile, έτσι ώστε ο βρόχος να εκτελείται όπως προβλέπεται. Μπορείτε να χρησιμοποιήσετε τις γραμμές καθοδήγησης ως οπτικό βοήθημα. Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:

    def main():
    	ενώ δεν είναι left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
  • Σύρετε ή πληκτρολογήστε μια εντολή stop εκτός του βρόχου while. Βεβαιωθείτε ότι η εντολήstopείναι ευθυγραμμισμένη με τον βρόχοwhileκαι δεν έχει εσοχή, έτσι ώστε να εκτελείται εκτός του βρόχου όπως προβλέπεται. Μπορείτε να χρησιμοποιήσετε τις γραμμές καθοδήγησης ως οπτικό βοήθημα.  Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:

    def main():
    	ενώ δεν είναι left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • Ανοίξτε το παράθυρο της παιδικής χαράς, εάν δεν είναι ήδη ανοιχτό. Βεβαιωθείτε ότι η παιδική χαράτου Wall Mazeείναι ανοιχτή. 
  • Εκτελέστε το έργο.
  • Παρακολουθήστε το ρομπότ εικονικής πραγματικότητας να οδηγεί από την αρχή του λαβυρίνθου του τοίχου και να σταματά όταν ο αισθητήρας προφυλακτήρα πιεστεί από τον τοίχο.
  • Η εντολή Drive (Οδήγηση) επιτρέπει στο ρομπότ εικονικής πραγματικότητας (VR) να συνεχίσει να κινείται προς τα εμπρός, ενώ ελέγχει την κατάσταση του αισθητήρα προφυλακτήρα με την εντολή Left Bumper Pressed (Πατημένος αριστερός προφυλακτήρας). Μόλις η εντολή left_bumper.pressedαναφέρει ότι είναι True, το VR Robot θα μετακινηθεί στην επόμενη εντολή εκτός του βρόχου και θα σταματήσει να οδηγεί.

Επιλέξτε το κουμπί Επόμενο για να συνεχίσετε με το υπόλοιπο μάθημα.