DeVilMaYcRyGR Δημοσ. 12 Νοεμβρίου 2018 Δημοσ. 12 Νοεμβρίου 2018 Συνεχίζοντας και για να μην ανοίγω σεντόνι στην προηγούμενη έχω και μια δεύτερη άσκηση η οποία είναι η εξής Ουρά δύο άκρων Γράψτε πρόγραμμα διαχείρισης μιας ουρά δύο άκρων (double-ended queue ή deque) ως εξής: Το πρόγραμμα εκτελείται συνεχώς και δέχεται στην είσοδο κάποιο αριθμητικό δεδομένο το οποίο εισάγεται στην ουρά. Στη συνέχεια το πρόγραμμα παρουσιάζει στην οθόνη τη νέα μορφή της ουράς και περιμένει το επόμενο δεδομένο. Όταν ο χρήστης πληκτρολογήσει ‘q’ το πρόγραμμα τερματίζει την εκτέλεσή του. Είσοδος δεδομένων στην ουρά (enqueue): Εφόσον στην είσοδο δίνονται αριθμητικά δεδομένα με τη συνήθη δεκαδική μορφή (πχ. 15, 245, 7, κλπ.) αυτά εισάγονται στο τέλος της ουράς. Εάν δοθεί δεδομένο όπου προτάσσεται το 0 (πχ. 015, 0245, 07) τότε το πρόγραμμα εισάγει το δεδομένο στην αρχή της ουράς (αφού αφαιρέσει τον χαρακτήρα ‘0’) Έξοδος δεδομένων από την ουρά (dequeue): Εάν δοθεί ‘r’ (από το remove) εξάγεται δεδομένο από το τέλος της ουράς. Εάν δοθεί ‘0r’ εξάγεται δεδομένο από την αρχή της ουράς. Υπόδειξη: Γράψτε τον κώδικα με βάση τα παραδείγματα που έχουν παρουσιαστεί σε βίντεο για την απλή ουρά και τη στοίβα (stack) Ο κώδικας σας θα χρησιμοποιεί βρόχο και εντολή if για να ελέγχει την είσοδο που δίνει ο χρήστης ώστε να εκτελείται η αντίστοιχη ενέργεια Εδώ δεν έχω κάνει πολλά πράγματα πειραματισμούς κατά βάση αλλά ότι και να 'χω κάνει ή το ένα μέρος θα τρέξει άμα είναι πρώτο ή το δεύτερο. κοινώς κολοκύθια. Ότι και να βάλω το κάνει absolute number από μόνο του και έτσι το math.fabs είναι μάλλον δώρο άδωρο.Επίσης στο σημείο που λέει να δίνει τιμές από μπροστά θεώρησα ότι πρέπει να γίνει με την εντολή της append αλλά το μοναδικό σχετικό ήταν σε αυτόν το σύνδεσμο https://en.wikipedia.org/wiki/Double-ended_queue αλλά δεν βρήκα συντακτικά κάποιο παράδειγμα για να δω. Ευχαριστώ και πάλι lista = ['0'] print(lista) inp = None import math while True: inp = input('Νέο στοιχείο/r/q: ') if inp is not abs: math.fabs(inp) lista.insert(0, inp) print(lista) else: if inp>0: lista.append(inp) print(lista) print('Τέλος')
k33theod Δημοσ. 13 Νοεμβρίου 2018 Δημοσ. 13 Νοεμβρίου 2018 (επεξεργασμένο) Εγώ θα σου έλεγα να μην χρησιμοποιήσεις λίστα αλλά την deque https://docs.python.org/3/library/collections.html?highlight=deque#collections.deque Έχει έτοιμες όλες τις μεθόδους που χρειάζεσαι και με τη λίστα γίνεται φυσικά. Η input επιστρέφει πάντα string οπότε είναι ευκολότερο να κάνεις τους ελέγους και να καλείς τις αντίστοιχες μεθόδους της deque που χρειάζεσαι. Θέλει προσοχή μόνο στο if ladder στη σκάλα του if δηλαδή. Δέν μπορείς δηλαδή να ξεκινήσεις ελέγχοντας το if inp[0] == '0' και μετά το elif inp[:2]=='0r' ελπίζω να καταλαβαίνεις το 1ο είναι true και ποτέ δεν θα εκτελεστεί το δεύτερο. Κάνε μια προσπάθεια και ξαναρώτα Επεξ/σία 13 Νοεμβρίου 2018 από k33theod
DeVilMaYcRyGR Δημοσ. 14 Νοεμβρίου 2018 Μέλος Δημοσ. 14 Νοεμβρίου 2018 Το θέμα με το deque το είδα δίνει κάποιες ωραίες εντολές αλλά δεν δίνει κανένα ωραίο συντακτικό παράδειγμα για να πάνε σε πράξη. Η κατάλαβα λάθος από τον πίνακα. Ας πούμε η appendleft είναι μια ξεχωριστή εντολή σωστά? Ευχαριστώ για τα tip θα το δουλέψω και θα επανέλθω
k33theod Δημοσ. 14 Νοεμβρίου 2018 Δημοσ. 14 Νοεμβρίου 2018 Είναι λίγο πιο κάτω τα παραδείγματα στο τέλος του documentation from collections import deque >>> mydq =deque() >>> mydq.append(4) >>> mydq.appendleft(4) >>> print(mydq) deque([4, 4]) >>> mydq.appendleft(5) >>> print(mydq) deque([5, 4, 4]) >>> mydq.pop() 4 >>> mydq.popleft() 5 >>> print(mydq) deque([4]) με λίστα λίγο πιο περίπλοκο >>> mydql=[] >>> mydql.append(4) >>> mydql.insert(0,5)#appendleft >>> mydql [5, 4] >>> mydql.append(7) >>> mydql [5, 4, 7] >>> mydql.pop() 7 >>> mydql [5, 4] >>> mydql.remove(mydql[0])#popleft >>> mydql
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα