####ID 34-robot-motion-complex-XX #### Άσκηση: (δε μετράει στο βαθμό bonus) #### #### ############################################################## #### Συνέχεια της άσκησης 27 (όχι της 30). #### Αντιγράψτε εδώ τη συνάρτηση move που γράψατε για την άσκηση 27 #### και τροποποιήστε την (αν θέλετε). #### ############################################################## #### #### Έχετε ένα robot που κινείται στο επίπεδο. Το robot υπακούει στις παρακάτω εντολές: #### #### e: κινήσου μια μονάδα δεξιά, w: κινήσου μια μονάδα αριστερά, n: κινήσου μια μονάδα προς τα πάνω, s: κινήσου μια μονάδα προς τα κάτω #### .: μείνε ακίνητος, d: διπλασίασε τη μονάδα κίνησής σου, h: μείωσε στο μισό τη μονάδα κίνησής σου, #### r: πήγαινε στο συμμετρικό σημείο ως προς τον άξονα των x, R: πήγαινε στο συμμετρικό σημείο ως προς τον άξονα των y. #### #### *** Νέα εντολή που δεν υπήρχε στην άσκηση 27 *** #### (xxx): Εκτέλεσε μια φορά τις εντολές που βρίσκονται μέσα στην παρένθεση. Ισοδύναμο με το xxx. #### X(xxx): (όπου X ψηφίο από 1 έως 9) εκτέλεσε Χ φορές το block των επόμενων εντολών xxx που βρίσκονται μέσα στην παρένθεση. #### #### Οι εντολές xxx στις δύο προηγούμενες μορφές μπορούν να είναι ο,τιδήποτε. #### Μπορεί να είναι μια κενή εντολή ή μπορεί να περιέχει κι άλλες παρενθέσεις. #### #### Αρχικά, το robot είναι στη θέση (0,0) η μονάδα κίνησής του ισούται με 1. #### #### Γράψτε μια συνάρτηση σε Python #### #### robotmove(commmand) #### #### όπου command είναι ένα string στο οποίο κάθε γράμμα είναι μια από τις παραπάνω εντολές με τους παραπάνω κανόνες. Το robot διαβάζει το string από τα #### αριστερά προς τα δεξιά και εκτελεί τις αντίστοιχες εντολές. Η συνάρτησή σας θα πρέπει να επιστρέψει μια λίστα με δύο #### αριθμούς (floats) [x, y], με την τελική θέση του robot. #### #### Αν το string command περιέχει γράμματα που δεν αντιστοιχούν σε εντολές του robot τότε αυτά τα γράμματα πρέπει να μη #### λαμβάνονται υπόψιν από το πρόγραμμά σας. #### #### *** Παράδειγμα: *** #### #### Αν command="e.enAwwsSs" τότε [x, y] = [0., -1.]. #### Αν command="(e.enAww)sSs" τότε [x, y] = [0., -1.]. #### Αν command="2(en)()" τότε [x, y] = [2, 2]. #### Αν command="3(e2(en))4(w)5()" τότε [x, y] = [5, 6]. #### #### *** Γενικές Οδηγίες: *** #### #### Γράφετε τον κώδικά σας αποκλειστικά ανάμεσα στις γραμμές START και STOP παρακάτω. #### Δεν πρέπει να πειράξετε καθόλου τις υπόλοιπες γραμμές #### #### Για να τρέξετε το πρόγραμμά σας (αποθηκευμένο στο αρχείο user.py) δίνετε την εντολή #### #### python3 user.py #### #### ενώ για να το ελέγξετε με τον tester δίνετε την εντολή #### #### python3 tester.py #### #### φροντίζοντας τα αρχεία user.py και tester.py να είναι στον ίδιο κατάλογο (directory) #### #### ****ΠΡΟΣΟΧΗ*****ΠΡΟΣΟΧΗ*****ΠΡΟΣΟΧΗ*****ΠΡΟΣΟΧΗ*****ΠΡΟΣΟΧΗ*****ΠΡΟΣΟΧΗ**** #### Μη γράψετε καμιά εντολή εισόδου (input) ή εξόδου (print) #### στον κώδικα που θα βάλετε ανάμεσα στα START και STOP. Αυτά είναι ήδη γραμμένα. #### Αν βάλετε και σεις το πρόγραμμά σας βγαίνει λάθος. #### command = input("Δώστε το string εντολή για το robot: ") #### #### Υποθέσεις: #### #### Στο σημείο αυτό ο χρήστης έχει δώσει το string command #### #### Απαιτήσεις: #### #### Στο τέλος του προγράμματός σας θα πρέπει #### #### η συνάρτηση newmove(command) #### #### να υπολογίζει αυτό που περιγράφεται στην εκφώνηση. #### Μην αλλάξετε ό,τι είναι από τη γραμμή αυτή και πάνω ####START Από δω και κάτω γράφετε το πρόγραμμά σας.---------------------------------------------------------------- def robotmove(command): #### ####STOP Μην αλλάξετε ό,τι είναι από τη γραμμή αυτή και κάτω-------------------------------------------------------- print("Η απάντηση είναι {}.".format(robotmove(command))) ####