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

Μάθημα 2: Δημιουργία και δοκιμή του έργου

Συνέχιση της κατασκευής του έργου 

  • Τώρα πρέπει να οριστεί η συνθήκη της εντολής if else. Για να χρησιμοποιήσετε τον Αισθητήρα Απόστασης για την ανίχνευση κάστρων, μπορεί να χρησιμοποιηθεί η εντολή found_object. Προσθέστε την εντολή found_objectστη συνθήκη. Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:

    def main():
    	# Εντοπίζει ο αισθητήρας απόστασης ένα κάστρο;
    	
    	if front_distance.found_object():
    		# Ανιχνεύτηκε συντριβή κάστρου από έναν αισθητήρα απόστασης
    		πέρασμα
    		
    	αλλιώς:
    		# Γυρίστε για να βρείτε ένα κάστρο χρησιμοποιώντας τον αισθητήρα απόστασης
    		πέρασμα
  • Εάν ο Αισθητήρας Απόστασης εντοπίσει ένα αντικείμενο, το Ρομπότ Εικονικής Πραγματικότητας (VR) θα πρέπει να κινηθεί προς τα εμπρός για να ανατρέψει το κάστρο. Προσθέστε μια εντολή driveστον κλάδο 'if' της πρότασης if else και ορίστε την παράμετρο ώστε να οδηγεί το VR Robot προς τα εμπρός. (Αυτή η εντολή θα πρέπει να αντικαταστήσει την εντολή 'pass'). 

    def main():
    	# Εντοπίζει ο αισθητήρας απόστασης ένα κάστρο;
    	
    	if front_distance.found_object():
    		# Ανιχνεύτηκε κάστρο σύγκρουσης από έναν αισθητήρα απόστασης
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# Στρίψτε για να βρείτε ένα κάστρο χρησιμοποιώντας τον αισθητήρα απόστασης
    		pass
  • Όταν η εντολή found_object αναφέρει False, θα εκτελεστεί ο κλάδος 'else', επομένως το VR Robot θα πρέπει να γυρίσει για να βρει ένα κάστρο στην Παιδική Χαρά. Προσθέστε μια εντολή turn μέσα στον κλάδο 'else' και ορίστε τις παραμέτρους για να στρίψετε το ρομπότ εικονικής πραγματικότητας προς τα δεξιά. 

    def main():
    	# Εντοπίζει ο αισθητήρας απόστασης ένα κάστρο;
    	
    	if front_distance.found_object():
    		# Ανιχνεύτηκε κάστρο σύγκρουσης από έναν αισθητήρα απόστασης
    		drivetrain.drive(FORWARD)
    		
    	αλλιώς:
    		# Στρίψτε για να βρείτε ένα κάστρο χρησιμοποιώντας τον αισθητήρα απόστασης
    		drivetrain.turn(RIGHT)

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

Ο κλάδος 'else' της εντολήςif elseλειτουργεί σε ένα έργο μόνο ως μέρος μιας εντολήςif else. Ενώ μπορείτε να έχετε μια εντολήifαυτόνομη, δεν υπάρχει εντολή 'else' στο VEXcode VR Python. Ο κλάδος 'else' εκτελείται όταν δεν πληρούται η συνθήκη του κλάδου 'if'. Χωρίς μια καθορισμένη συνθήκη (τον κλάδο 'if'), ο κλάδος 'else' δεν θα εκτελεστεί ποτέ. Τρία αποσπάσματα κώδικα που παρουσιάζουν εντολές υπό όρους σε Python, καθένα από τα οποία περιλαμβάνει μια εντολή if με μια συνθήκη ακολουθούμενη από τη λέξη-κλειδί pass. Τα δύο πρώτα αποσπάσματα έχουν πράσινα σημάδια ελέγχου από πάνω τους, που υποδεικνύουν τη σωστή χρήση. Το πρώτο απόσπασμα περιλαμβάνει μόνο μια πρόταση if, ενώ το δεύτερο περιλαμβάνει τόσο μια πρόταση if όσο και μια πρόταση else με τη λέξη-κλειδί pass σε κάθε μία. Το τρίτο τμήμα κώδικα, που σημειώνεται με κόκκινο σταυρό, αποτελείται μόνο από μια πρόταση else με pass, που υποδεικνύει λανθασμένη χρήση, καθώς μια πρόταση else θα πρέπει να ακολουθεί μια πρόταση if.

Προσθήκη βρόχου και δοκιμή του έργου

  • Πριν από τη δοκιμή του έργου, πρέπει να προστεθεί μία ακόμη εντολή. Οι εντολές If else θα ελέγξουν τη συνθήκη μόνο μία φορά πριν μετακινηθούν στην επόμενη εντολή εκτός της εντολής. Στην Ενότητα 7, προστέθηκε στο έργο ένας άπειρος βρόχοςενώ για να δώσει εντολή στο Ρομπότ Εικονικής Πραγματικότητας να ελέγχει επανειλημμένα την κατάσταση του Αισθητήρα Κάτω Ματιού. Για να βεβαιωθείτε ότι η συνθήκη του Αισθητήρα Απόστασης ελέγχεται επανειλημμένα , σύρετε ή πληκτρολογήστε έναν άπειρο βρόχο while , στη συνέχεια, αντιγράψτε την εντολήif elseμέσα στον άπειρο βρόχοwhile. Το έργο σας θα πρέπει τώρα να μοιάζει με αυτό:
    • Θυμηθείτε να προσέχετε την εσοχή κατά την αντιγραφή και επικόλληση εντολών σε έναν βρόχο, έτσι ώστε το έργο να λειτουργεί όπως προβλέπεται κατά την εκτέλεσή του. 

      def main():
      
      	while True:
      		# Εντοπίζει ο αισθητήρας απόστασης ένα κάστρο;
      	
      		if front_distance.found_object():
      			# Ανιχνεύτηκε κάστρο σύγκρουσης από έναν αισθητήρα απόστασης
      			drivetrain.drive(FORWARD)
      		
      		else:
      			# Στρίψτε για να βρείτε ένα κάστρο χρησιμοποιώντας τον αισθητήρα απόστασης
      			drivetrain.turn(RIGHT)
      		
      		wait(5, MSEC)
  • Ανοίξτε το παράθυρο της παιδικής χαράς εάν δεν είναι ήδη ανοιχτό. Βεβαιωθείτε ότι ανοίγει ηDynamic Castle Crasher Playgroundκαι εκτελέστε το έργο. Μια κάτοψη της παιδικής χαράς Dynamic Castle Crasher που δείχνει ότι μόνο μερικά από τα κάστρα έχουν γκρεμιστεί. Το ρομπότ εικονικής πραγματικότητας (VR) βρίσκεται επάνω δεξιά στην παιδική χαρά μετά την κίνησή του γύρω από την παιδική χαρά.
  • Μόλις το ρομπότ εικονικής πραγματικότητας (VR) ρίξει τουλάχιστον δύο κάστρα, επαναφορτώστε την παιδική χαρά και εκτελέστε το έργο σε μια άλλη διάταξη της παιδικής χαράς Dynamic Castle Crasher. Μια κάτοψη του Dynamic Castle Crasher με τη διεπαφή της παιδικής χαράς. Το κουμπί επαναφοράς κάτω αριστερά στη διεπαφή της παιδικής χαράς επισημαίνεται με ένα κόκκινο πλαίσιο.
  • Σε κάθε εκτέλεση του έργου, το Ρομπότ Εικονικής Πραγματικότητας θα περιστρέφεται μέχρι να ανιχνευθεί ένα κάστρο από τον Αισθητήρα Απόστασης και στη συνέχεια θα οδηγεί προς αυτό το κτίριο για να το ανατρέψει.Μια γωνιακή άποψη της παιδικής χαράς Dynamic Castle Crasher που δείχνει το ρομπότ εικονικής πραγματικότητας να σπρώχνει ένα κομμάτι ενός κάστρου πάνω από την κόκκινη γραμμή περιγράμματος και από την άκρη της παιδικής χαράς.
  • Κατά τη διάρκεια του έργου, το ρομπότ εικονικής πραγματικότητας (VR) μπορεί να σπρώξει ένα κομμάτι κάστρου μέχρι την άκρη και να πέσει από την παιδική χαρά. Αυτό συμβαίνει επειδή η εντολή found_objectεξακολουθεί να αναφέρει ότι υπάρχει ένα αντικείμενο μπροστά από το ρομπότ εικονικής πραγματικότητας. Όταν αυτή η εντολή αναφέρει True, το ρομπότ VR κινείται προς τα εμπρός, με αποτέλεσμα το ρομπότ VR να πέσει από την παιδική χαρά.

Ροή Έργου με Δήλωση If Else

Η εντολή if else χρησιμοποιείται ώστε το ρομπότ εικονικής πραγματικότητας να μπορεί να λάβει μια απόφαση. Εάν η συνθήκη Boolean είναι True, τότε θα εκτελεστούν οι εντολές μέσα στον κλάδο 'if'. Εάν η συνθήκη Boolean είναι False, τότε θα εκτελεστούν οι εντολές μέσα στον κλάδο 'else'.

Για παράδειγμα, σε αυτήν την επανάληψη του Dynamic Castle Crasher Playground, όταν ξεκινά το έργο, ο Αισθητήρας Απόστασης ανιχνεύει ένα αντικείμενο – η συνθήκη της εντολήςfound_objectαναφέρει True. Τώρα θα εκτελεστεί ο κλάδος 'if'του έργου και το VR Robot θα προχωρήσει. Το ρομπότ εικονικής πραγματικότητας θα παραλείψει τον κλάδο «else» του έργου.Στα αριστερά βρίσκεται το τρέχον απόσπασμα κώδικα του έργου. Στα δεξιά είναι η κάτοψη της παιδικής χαράς Dynamic Castle Crasher με ορατή τη διεπαφή της παιδικής χαράς. Η μέτρηση του αισθητήρα απόστασης στη διεπαφή της παιδικής χαράς δείχνει 568 mm και επισημαίνεται με ένα κόκκινο πλαίσιο. Αυτό δείχνει ότι το κάστρο στη μέση της παιδικής χαράς απέχει 568 χιλιοστά από το ρομπότ εικονικής πραγματικότητας.

  • Σημειώστε ότι τα δεδομένα του αισθητήρα απόστασης αναφέρονται επίσης στον Πίνακα ελέγχου. Όταν εντοπιστεί ένα αντικείμενο, θα εμφανιστεί η τιμή της απόστασης.

Ωστόσο, σε αυτήν την επανάληψη του Dynamic Castle Crasher Playground, όταν ξεκινά το έργο, ο Αισθητήρας Απόστασης ΔΕΝ ανιχνεύει κάποιο αντικείμενο – η συνθήκη της εντολήςfound_object αναφέρει False. Τώρα το ρομπότ VR θα παραλείψει τον κλάδο 'if' του έργου και θα εκτελεστεί ο κλάδος 'else' του έργου, επομένως το ρομπότ VR θα στρίψει δεξιά.Στα αριστερά βρίσκεται το τρέχον απόσπασμα κώδικα του έργου. Στα δεξιά είναι η κάτοψη της παιδικής χαράς Dynamic Castle Crasher με ορατή τη διεπαφή της παιδικής χαράς. Η μέτρηση του αισθητήρα απόστασης στη διεπαφή της παιδικής χαράς δείχνει 1354 mm και επισημαίνεται με ένα κόκκινο πλαίσιο. Αυτό δείχνει ότι το κάστρο στην κορυφή της παιδικής χαράς απέχει 1354 χιλιοστά από το ρομπότ εικονικής πραγματικότητας.

  • Σημειώστε ότι η τιμή του αισθητήρα απόστασης στον πίνακα ελέγχου αναφέρεται ως > 3000 mm. Ο αισθητήρας απόστασης μπορεί να ανιχνεύσει αντικείμενα εντός εύρους 3000 χιλιοστών (mm), επομένως όταν δεν ανιχνεύεται κάποιο αντικείμενο, η τιμή αναφέρεται ως μεγαλύτερη από (>) 3000 mm. 

Επειδή η εντολή if else βρίσκεται μέσα σε έναν άπειρο βρόχο while , το έργο επαναλαμβάνεται στην κορυφή του άπειρου βρόχουwhile για να ελέγξει επανειλημμένα την συνθήκη της εντολής if else. Αυτός ο βρόχος θα συνεχιστεί επ' αόριστον, δίνοντας εντολή στο ρομπότ εικονικής πραγματικότητας να ελέγχει συνεχώς την συνθήκη αν αλλιώςεκατοντάδες φορές ανά δευτερόλεπτο.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • Σημειώστε ότι οι εντολές drive και turn μέσα στην εντολή if elseείναι εντολές που δεν βρίσκονται σε αναμονή. Οι εντολές που δεν βρίσκονται σε αναμονή δεν διακόπτουν τη ροή ενός έργου ενώ εκτελούνται.  Μια συμπεριφορά μη αναμονής που εκτελείται σε μια εντολή if else (όπως 'drive forward if object is detected') θα συνεχιστεί όσο ελέγχεται η συνθήκη και θα αλλάξει μόνο όταν αλλάξει η συνθήκη.

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

Μια εντολήif elseχρησιμοποιείται για να διασφαλιστεί ότι εκτελείται μόνο ένας κλάδος στο έργο όταν ελέγχεται η συνθήκη. Μόνο μία περίπτωση ή συνθήκη μπορεί να είναι αληθής ανά πάσα στιγμή. Αυτό καθιστά το έργο πιο αποτελεσματικό.

Ο κώδικας έργου Python με βέλη που δείχνουν προς τις εντολές if και else. Το πάνω μέρος των βελών δείχνει την ένδειξη Checks (Έλεγχος συνθήκης του αισθητήρα απόστασης) για να εμφανιστεί η εντολή distance.found_object if (Έλεγχος_συνθήκης) που ελέγχει τη συνθήκη. Εάν ανιχνευθεί το αντικείμενο, θα εκτελεστεί η εντολή της πρότασης if, αλλά εάν δεν ανιχνευθεί κανένα αντικείμενο, θα εκτελεστεί η εντολή της πρότασης else.

Συγκρίνετε το τρέχον έργο με το έργο που δημιουργήθηκε στην Ενότητα 7.  Το έργο της Ενότητας 7 χρησιμοποιεί τέσσερις δηλώσεις if

Ο κώδικας του έργου από την Ενότητα 7 με ένα μεγάλο πορτοκαλί βέλος που περιβάλλει ολόκληρο τον κώδικα, ξεκινώντας και τελειώνοντας στην εντολή while True. Μια σημείωση στο πορτοκαλί βέλος αναφέρει If οι εντολές που περιέχονται στον άπειρο βρόχο while ελέγχονται επανειλημμένα. Τα πράσινα βέλη μέσα στην εντολή while True δείχνουν τη ροή του έργου, ξεκινώντας με μεμονωμένες εντολές if σχετικά με το αν εμφανίζεται ένα συγκεκριμένο χρώμα και τη συμπεριφορά που πρέπει να γίνει ανάλογα, είτε πρόκειται για την εκτέλεση μιας συμπεριφοράς είτε για τη μετάβαση στην επόμενη εντολή if μέχρι το τέλος όπου όλα επαναλαμβάνονται ξανά.

Κατά την εκτέλεση ενός έργου με πολλαπλές εντολές if , θα μπορούσε να είναι πιθανό πολλαπλές συνθήκες να αναφέρουν True (ή False) καθώς το έργο εκτελείται μέσω των εντολών στον άπειρο βρόχο while. Συγκρούσεις όπως αυτή θα μπορούσαν να προκαλέσουν τη διακοπή της εκτέλεσης του έργου ή την επιβράδυνση της εκτέλεσης. 

Με άλλα λόγια, οι πολλαπλές εντολές ifσε ένα έργο είναι σαν να ταξιδεύετε σε έναν δρόμο με πολλαπλές ράμπες εξόδου. Ανάλογα με το πού προσπαθείτε να πάτε, θα στρίψετε σε διαφορετικά σημεία. Για παράδειγμα,ανπηγαίνατε σχολείο, θα στρίβατε αριστερά· αν πηγαίνατε στο κατάστημα, θα στρίβατε δεξιά. Τι θα γινόταν όμως αν δεν πήγαινες σχολείο ή στο μαγαζί; Και οι δύο συνθήκες θα αναφέρουν ψευδή τιμή και θα παραμείνετε στην ευθεία πορεία. Ή τι θα γινόταν αν πήγαινες και στο σχολείο και στο μαγαζί; Και οι δύο συνθήκες θα αναφέρουν True, αλλά δεν μπορείτε να στρίψετε σε δύο τοποθεσίες ταυτόχρονα. Ένα διάγραμμα που δείχνει μια γκρι διασταύρωση σε σχήμα Τ με τρία βέλη κατεύθυνσης - ένα που δείχνει αριστερά, ένα που δείχνει ευθεία προς τα πάνω και ένα που δείχνει δεξιά. Στο κέντρο της διασταύρωσης βρίσκεται ένα ρομπότ εικονικής πραγματικότητας (VR). Στα δεξιά του διαγράμματος υπάρχουν δύο υποθετικές δηλώσεις σε μορφή κώδικα: αν πηγαίνετε στο σχολείο: Στρίψτε αριστερά και αν πηγαίνετε στο κατάστημα: Στρίψτε δεξιά. Οι εντολές if είναι γραμμένες με μαύρο και μπλε κείμενο, με το if να είναι με μπλε χρώμα και τις οδηγίες κατεύθυνσης με μπλε χρώμα.

 

Για να συνεχίσουμε την αναλογία, μια πρόταση αν αλλιώςείναι σαν να ταξιδεύεις σε μια διασταύρωση του δρόμου – σε αναγκάζει να πάρεις μια απόφαση. Ανπηγαίνετε σχολείο, στρίψτε αριστερά· αλλιώς, στρίψτε δεξιά. Όπου κι αν πας, είτε στρίβεις αριστερά είτε δεξιά. Η χρήση μιας πρότασης if elseθα απέφευγε σφάλματα όπως αυτά που αναφέρθηκαν παραπάνω, επειδή θα σας ανάγκαζε να πάρετε μια απόφαση, καθώς μόνο μία συνθήκη μπορεί να είναι αληθής σε μια δεδομένη στιγμή.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.

Ερωτήσεις

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

Έγγραφο Google / .docx / .pdf