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

Μάθημα 2: Χρήση Τελεστών Σύγκρισης

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

Μια κάτοψη της παιδικής χαράς Wall Maze με το ρομπότ εικονικής πραγματικότητας στην αρχική θέση, στο κέντρο και στο κάτω μέρος της παιδικής χαράς. Το γράμμα Α βρίσκεται ακριβώς στα αριστερά του ρομπότ, χωρισμένο από ένα κοντό τοίχωμα. Ο αριθμός 1 βρίσκεται προς τη δεξιά γωνία του ρομπότ, χωρισμένος από έναν κάθετο και έναν οριζόντιο τοίχο.

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

  • Προσδιορίστε ότι οι τιμές μεγαλύτερο από (>), μικρότερο από (<) και ίσο με (==) είναι τελεστές σύγκρισης που συγκρίνουν δύο τιμές, γνωστοί ως τελεστέοι.  
  • Προσδιορίστε ότι ο τελεστής μεγαλύτερο από (>) συγκρίνει δύο τιμές και αναφέρει True εάν η αριστερή τιμή είναι μεγαλύτερη από τη δεξιά τιμή.
  • Προσδιορίστε ότι ο τελεστής μικρότερο από (<) συγκρίνει δύο τιμές και αναφέρει True εάν η αριστερή τιμή είναι μικρότερη από τη δεξιά τιμή.
  • Προσδιορίστε ότι οι τελεστές μεγαλύτερο από (>) ή μικρότερο από (<) αναφέρουν τιμή True ή False όταν χρησιμοποιούνται ως συνθήκη σε έναν βρόχο while.
  • Περιγράψτε πώς να δημιουργήσετε ένα έργο που έχει ένα ρομπότ εικονικής πραγματικότητας να κινείται προς τα εμπρός μέχρι η τιμή του αισθητήρα απόστασης να γίνει μικρότερη από ένα ορισμένο ποσό.

Τελεστές σύγκρισης

Οι τελεστές μικρότερο από (<), μεγαλύτερο από (>) και ίσο με (==) συγκρίνουν δύο τιμές, γνωστές και ως τελεστέοι. Η τιμή στα αριστερά του τελεστή είναι ο πρώτος τελεστέος και η τιμή στα δεξιά είναι ο δεύτερος τελεστέος. Οι τελεστές αναφέρουν τιμές Boolean και επιστρέφουν μια τιμή True όταν η σύγκριση είναι σωστή και False όταν η σύγκριση είναι σωστή και ΟΧΙ με.

  • Σε αυτά τα παραδείγματα που χρησιμοποιούν τον τελεστή μικρότερο από (<), όταν η πρόταση είναι αριθμητικά σωστή, θα αναφέρει True.Σε γραμμές με τελεστές μικρότερους από - η επάνω γραμμή αναφέρει 50 μικρότερο από 25 και επισημαίνεται ως «αναφέρει ψευδή». Η κάτω σειρά αναφέρει 25 λιγότερο από 50 και φέρει την ένδειξη «αναφορές αληθείς».
  • Ομοίως, σε αυτά τα παραδείγματα που χρησιμοποιούν τον τελεστή μεγαλύτερο από (>), η αριθμητικά σωστή πρόταση θα αναφέρει True.Σε γραμμές με τελεστές μεγαλύτερους από - η επάνω γραμμή αναγράφει 50 μεγαλύτερο από 25 και φέρει την ετικέτα "αναφέρει την τιμή true". Η κάτω σειρά αναγράφει 25 μεγαλύτερο από 50 και φέρει την ένδειξη «αναφορές ψευδείς».
  • Ο τελεστής ίσο με (==) αναφέρει True όταν οι δύο τιμές είναι ακριβώς ίδιες και False όταν δεν είναι.Σε γραμμές με τελεστές ίσους με - η πρώτη γραμμή αναφέρει 50 = = 50 και φέρει την ετικέτα 'αναφέρει αληθές'. Η κάτω σειρά γράφει 25 = = 50 και φέρει την ένδειξη «αναφορές ψευδείς».
    • Σημειώστε ότι το διπλό σύμβολο ίσον σημαίνει «ίσο με» και συγκρίνει τις δύο τιμές. Ένα μοναδικό σύμβολο ισότητας είναι ένας τελεστής ανάθεσης που αντιστοιχίζει μια τιμή σε μια μεταβλητή.

Οι τελεστές σύγκρισης μπορούν να συγκρίνουν δεκαδικούς, ακέραιους ή εντολές αριθμητικής αναφοράς.

Χρήση τελεστών σύγκρισης με δεδομένα αισθητήρων απόστασης

Οι τελεστές σύγκρισης είναι ιδιαίτερα χρήσιμοι όταν χρησιμοποιείτε αριθμητικά δεδομένα από έναν αισθητήρα, όπως τον αισθητήρα απόστασης, για να κάνετε το ρομπότ εικονικής πραγματικότητας να λάβει μια απόφαση. Στην προηγούμενη Μονάδα, τα δεδομένα από τον Αισθητήρα Προφυλακτήρα χρησιμοποιούνταν για να περιστρέφεται το Ρομπότ Εικονικής Πραγματικότητας (VR) όταν πατιόταν ο Αισθητήρας Προφυλακτήρα. Ωστόσο, με έναν τελεστή σύγκρισης, μπορούμε να χρησιμοποιήσουμε δεδομένα από τον αισθητήρα απόστασης για να κάνουμε το ρομπότ εικονικής πραγματικότητας να στρίψει σε μια πιο ακριβή θέση. Αυτό είναι χρήσιμο για να αποφύγετε την πρόσκρουση με το αυτοκίνητο σε τοίχους ή για να κάνετε το ρομπότ εικονικής πραγματικότητας να πλοηγηθεί σε ένα συγκεκριμένο σημείο σε μια παιδική χαρά. 

Τα δεδομένα από τον αισθητήρα απόστασης μπορούν να χρησιμοποιηθούν ως μία από τις τιμές στον τελεστή σύγκρισης.

front_distance.get_distance(MM) > 50

Για παράδειγμα, αν θέλαμε το ρομπότ εικονικής πραγματικότητας να κινείται προς ένα αντικείμενο, όπως έναν τοίχο, και στη συνέχεια να σταματάει όταν πλησιάζει το αντικείμενο, θα μπορούσαμε να το κάνουμε αυτό χρησιμοποιώντας έναν τελεστή σύγκρισης και τη συνάρτηση get _distance. Ουσιαστικά, ζητάμε από το ρομπότ εικονικής πραγματικότητας να οδηγήσει ενώ η απόσταση μεταξύ του ρομπότ και του αντικειμένου είναι μεγαλύτερη από μια τιμή κατωφλίου, όπως 50 χιλιοστά (mm).Μια κοντινή όψη του κάτω κέντρου της παιδικής χαράς Wall Maze, με το ρομπότ εικονικής πραγματικότητας (VR) στην πλατεία εκκίνησης. Ένα πράσινο βέλος εκτείνεται από το μπροστινό μέρος του ρομπότ έως περίπου 50 mm από τον πρώτο απέναντι τοίχο, υποδεικνύοντας πού η απόσταση λήψης μεγαλύτερη από 50 mm αναφέρεται ως αληθής. Ένα κόκκινο βέλος εκτείνεται από το μπροστινό μέρος του πράσινου βέλους προς τον τοίχο, που δείχνει πού η απόσταση λήψης μεγαλύτερη από 50 mm αναφέρεται ως ψευδής.

Ενώ ο αισθητήρας απόστασης αναφέρει ότι είναιεπιπλέοναπό 50 χιλιοστά (mm) ή ότι η τιμή είναιμεγαλύτερη από(>) 50, το ρομπότ εικονικής πραγματικότητας μπορεί να κινείται ελεύθερα. Όταν ο αισθητήρας απόστασης αναφέρει ότι είναιπιο κοντάαπό 50 χιλιοστά (mm) ή η τιμή είναιόχιμεγαλύτερη από (>) 50, το ρομπότ εικονικής πραγματικότητας πρέπει να σταματήσει ή να γυρίσει πριν συγκρουστεί με τον τοίχο. 

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

Η επιλογή του τελεστή σύγκρισης που θα χρησιμοποιηθεί μπορεί να είναι μια στυλιστική επιλογή. Ο τελεστής μεγαλύτερο από (>) χρησιμοποιήθηκε στο παραπάνω παράδειγμα για να γίνει το έργο όσο το δυνατόν πιο σαφές και ευανάγνωστο. Ενώ το ρομπότ εικονικής πραγματικότητας (VR) βρίσκεται σε απόσταση μεγαλύτερη από 50 χιλιοστά, προχωρήστε προς τα εμπρός. Θα μπορούσατε να επιτύχετε τον ίδιο στόχο αντιστρέφοντας τη σειρά των τιμών στον τελεστή και χρησιμοποιώντας έναν τελεστή μικρότερο από (<).

ενώ 50 > front_distance.get_distance(MM):

Εδώ, το ρομπότ εικονικής πραγματικότητας θα οδηγούσε ενώ τα 50 χιλιοστά ήταν μεγαλύτερα από την τιμή που αναφέρθηκε από τον αισθητήρα απόστασης. Το ρομπότ εικονικής πραγματικότητας θα εκτελούσε την ίδια συμπεριφορά, ωστόσο, το έργο είναι ελαφρώς λιγότερο σαφές και ευανάγνωστο. 

Ανάλογα με τα δεδομένα αισθητήρα που χρησιμοποιείτε, ο τελεστής ίσο με (==) ενδέχεται να μην κάνει το ρομπότ εικονικής πραγματικότητας να λειτουργεί όπως το θέλατε. Για παράδειγμα, αν ο στόχος είναι το ρομπότ εικονικής πραγματικότητας να σταματήσει 50 χιλιοστά από ένα αντικείμενο, μπορείτε να σκεφτείτε να χρησιμοποιήσετε τον τελεστή ίσον με (==).

ενώ front_distance.get_distance(MM) == 50:

Ωστόσο, στον Λαβύρινθο των Τοίχων για παράδειγμα, η χρήση ενός τελεστή ίσου με (==) με τον Αισθητήρα Απόστασης θα απαιτούσε μια τόσο ακριβή ένδειξη από τον αισθητήρα, να είναιακριβώς50 χιλιοστά, που η ταχύτητα του Ρομπότ Εικονικής Πραγματικότητας θα καθιστούσε σχεδόν αδύνατη την επίτευξη αυτού του επιπέδου ακρίβειας σε πραγματικό χρόνο. Έτσι, το ρομπότ εικονικής πραγματικότητας πιθανότατα θα συνεχίσει να κινείται πέρα ​​από το όριο, επειδή είτε αναφέρει τιμή 100 χιλιοστών είτε 25 χιλιοστών, καμία από αυτές δεν είναι με50 mm, επομένως ο χειριστής δεν αναφέρει ποτέ ως True. 

Τελεστές Σύγκρισης και το Πρόβλημα του Λαβυρίνθου του Τοίχου

Ένας βρόχος ενώ μπορεί να χρησιμοποιηθεί με τους τελεστές σύγκρισης και τον αισθητήρα απόστασης, έτσι ώστε το ρομπότ εικονικής πραγματικότητας να ελέγχει συνεχώς τα δεδομένα του αισθητήρα και να αξιολογεί τη σύγκριση. Αυτό μπορεί να επιτρέψει στο ρομπότ εικονικής πραγματικότητας να εκτελέσει μια συμπεριφορά ενώ η τιμή είναι πάνω ή κάτω από ένα συγκεκριμένο όριο. Στον Λαβύρινθο του Τοίχου, το επιθυμητό αποτέλεσμα είναι το Ρομπότ Εικονικής Πραγματικότητας να κινείται προς τα εμπρόςο Αισθητήρας Απόστασης να από χιλιοστά (mm) από τον τοίχο. Στη συνέχεια, θα πρέπει να σταματήσει ή να στρίψει για να συνεχίσει μέσα στον λαβύρινθο.

def main():
    ενώ front_distance.get_distance(MM) > 50:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

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

Αρχείο βίντεο

Αυτή η εικόνα εξηγεί τη ροή του παραπάνω έργου:

  • Ενώ ο αισθητήρας απόστασης βρίσκεται σε απόσταση μεγαλύτερη από 50 χιλιοστά (mm) από τον τοίχο, ο χειριστής αναφέρει True και παραμένει στον βρόχο ενώ
  • Όταν απέχει λιγότερο από 50 χιλιοστά (mm) από τον τοίχο, ο χειριστής αναφέρει False και τερματίζει τον βρόχοwhile.

Διάγραμμα ροής έργου του βρόχου while στο παραπάνω έργο. Ο βρόχος while θα συνεχίσει να εκτελείται όταν η απόσταση από τον τοίχο είναι μεγαλύτερη από 50 mm και η συνθήκη αυτή αναφέρεται ως true, με αποτέλεσμα το ρομπότ να κινηθεί προς τα εμπρός. Όταν η απόσταση από τον τοίχο δεν είναι μεγαλύτερη από 50, η συνθήκη αναφέρει false και το έργο υπάρχει στον βρόχο while, με αποτέλεσμα το ρομπότ να σταματήσει να οδηγεί.

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