k33theod Δημοσ. 11 Φεβρουαρίου 2018 Δημοσ. 11 Φεβρουαρίου 2018 (επεξεργασμένο) 19 ώρες πριν, liakos18 είπε Επειδή είμαι κι εγώ αρχάριος και το σκεφτόμουν αυτό που αναφέρεις μπορείς να μου περιγράψεις τι function μπορεί να γραφτεί για να το πετύχει; Εγώ αυτό που σκέφτηκα ήταν ένα dictionary που να αντιστοιχίζει το κάθε χρώμα με έναν αριθμό ανάλογα με τη σειρά που τα θέλω και να χρησιμοποιώ αυτή την αντιστοιχία για το sorting. Έτσι βέβαια ξεφεύγουμε από τις λίστες. Πώς μπορεί να γίνει αυτό χωρίς τη χρήση dict; Αδερφέ επειδή φαντάζομαι πως και για άλλους δεν είναι εύκολο αυτό το κομμάτι έκανα ένα παράδειγμα και εξηγώ μερικά πράγματα. Πάντα για python μιλάω Κατ' αρχήν η δουλειά γίνεται με την sorted https://docs.python.org/3/library/functions.html#sorted sorted(iterable, *, key=None, reverse=False) και όλη η ουσία είναι η key function. Έστω ότι έχω την παρακάτω λίστα και θέλω να την ταξινομήσω 1α μηχανικοί μετά προγραμματιστές μετά γραφίστες μηχανικός < προγραμματιστής > γραφίστας οπότε πρέπει να κάνω κάτι custom my_list = [ (1, 'Γιάννης', 35, 'Μηχανικός'), (2, 'Γιώργος', 38, 'Προγραμματιστής'), (3, 'Κώστας', 48, 'Γραφίστας'), (4, 'Αλέκος', 24, 'Μηχανικός'), (5, 'Παναγιώτης', 32, 'Γραφίστας'), (6, 'Κυριάκος', 27, 'Γραφίστας'), (7, 'Μιχάλης', 23, 'Μηχανικός'), (8, 'Παναγιώτης', 55, 'Προγραμματιστής'), (9, 'Γιάννης', 31, 'Μηχανικός')] Κάνω λοιπόν μια συνάρτηση που πρέπει να πέρνει ένα μόνο όρισμα. Το όρισμα αυτό πρέπει να είναι της μορφής που είναι τα στοιχεία της λίστας def custom_sort(object): if object[3]=='Μηχανικός': return 1 elif object[3]=='Προγραμματιστής': return 2 elif object[3]=='Γραφίστας': return 3 else: return 4 και αυτό είναι όλο sorted (my_list, key = custom_sort) [(1, 'Γιάννης', 35, 'Μηχανικός'), (4, 'Αλέκος', 24, 'Μηχανικός'), (7, 'Μιχάλης', 23, 'Μηχανικός'), (9, 'Γιάννης', 31, 'Μηχανικός'), (2, 'Γιώργος', 38, 'Προγραμματιστής'), (8, 'Παναγιώτης', 55, 'Προγραμματιστής'), (3, 'Κώστας', 48, 'Γραφίστας'), (5, 'Παναγιώτης', 32, 'Γραφίστας'), (6, 'Κυριάκος', 27, 'Γραφίστας')] >>> Υπάρχει και πιο απλός τρόπος να κάνεις το συγκεκριμένο χωρίς να γράψεις συνάρτηση. Ο παραπάνω όμως τρόπος σε καλύπτει για όλες τις περιπτώσεις. Αν δεν το έχεις ξαναρώτα. Επεξ/σία 11 Φεβρουαρίου 2018 από k33theod 1
liakos18 Δημοσ. 11 Φεβρουαρίου 2018 Δημοσ. 11 Φεβρουαρίου 2018 7 λεπτά πριν, k33theod είπε Αδερφέ επειδή φαντάζομαι πως και για άλλους δεν είναι εύκολο αυτό το κομμάτι έκανα ένα παράδειγμα και εξηγώ μερικά πράγματα. Πάντα για python μιλάω Κατ' αρχήν η δουλειά γίνεται με την sorted https://docs.python.org/3/library/functions.html#sorted sorted(iterable, *, key=None, reverse=False) και όλη η ουσία είναι η key function. Έστω ότι έχω την παρακάτω λίστα και θέλω να την ταξινομήσω 1α μηχανικοί μετά προγραμματιστές μετά γραφίστες μηχανικός < προγραμματιστής > γραφίστας οπότε πρέπει να κάνω κάτι custom my_list = [ (1, 'Γιάννης', 35, 'Μηχανικός'), (2, 'Γιώργος', 38, 'Προγραμματιστής'), (3, 'Κώστας', 48, 'Γραφίστας'), (4, 'Αλέκος', 24, 'Μηχανικός'), (5, 'Παναγιώτης', 32, 'Γραφίστας'), (6, 'Κυριάκος', 27, 'Γραφίστας'), (7, 'Μιχάλης', 23, 'Μηχανικός'), (8, 'Παναγιώτης', 55, 'Προγραμματιστής'), (9, 'Γιάννης', 31, 'Μηχανικός')] Κάνω λοιπόν μια συνάρτηση που πρέπει να πέρνει ένα μόνο όρισμα. Το όρισμα αυτό πρέπει να είναι της μορφής που είναι τα στοιχεία της λίστας def custom_sort(object): if object[3]=='Μηχανικός': return 1 elif object[3]=='Προγραμματιστής': return 2 elif object[3]=='Γραφίστας': return 3 else: return 4 και αυτό είναι όλο sorted (my_list, key = custom_sort) [(1, 'Γιάννης', 35, 'Μηχανικός'), (4, 'Αλέκος', 24, 'Μηχανικός'), (7, 'Μιχάλης', 23, 'Μηχανικός'), (9, 'Γιάννης', 31, 'Μηχανικός'), (2, 'Γιώργος', 38, 'Προγραμματιστής'), (8, 'Παναγιώτης', 55, 'Προγραμματιστής'), (3, 'Κώστας', 48, 'Γραφίστας'), (5, 'Παναγιώτης', 32, 'Γραφίστας'), (6, 'Κυριάκος', 27, 'Γραφίστας')] >>> Υπάρχει και πιο απλός τρόπος να κάνεις το συγκεκριμένο χωρίς να γράψεις συνάρτηση. Ο παραπάνω όμως τρόπος σε καλύπτει για όλες τις περιπτώσεις Ευχαριστώ πολύ για το παράδειγμα! Κατατοπιστικότατο! Εγώ όπως έγραψα πιο πάνω σκέφτηκα να το κάνω με αντιστοίχιση των 1,2,3,4 με τις ειδικότητες σε ένα dict. Κι εκείνο λειτουργεί αλλά αυτό σίγουρα είναι πιο σωστή αντιμετώπιση.
solarpower Δημοσ. 12 Φεβρουαρίου 2018 Δημοσ. 12 Φεβρουαρίου 2018 Οι ασκήσεις λύνονται όταν τεμαχίζεις το πρόβλημα σε υποπροβήματα. Πχ έλυσες το πρόβλημα το πώς θα συγκρίνεις δυο θέσεις, πχ μια έχει το Μπλε και μια Κόκκινο Πόσα είναι τα δυνατά ζευγάρια συγκρίσεων; Τα "χρώματα" που έδωσαν στην ουσία είναι σύστημα μονάδων με τρία ψηφία. Το Κόκκινο είναι μικρότερο από το Πράσινο και το Πράσινο μικρότερο από το Μπλε. άρα θες ένα κομμάτι κώδικα που θα δέχεται δυο χρώματα (οποιαδήποτε) και θα δίνει 1 αν το πρώτο είναι μεγαλύτερο, 0 αν είναι ίσα ή -1 αν το δεύτερο είναι μεγαλύτερο. μετά θες μια μέθοδο αντικατάστασης (Swap) και τέλος την ρουτίνα ταξινόμησης (βάλε και BubbleSort για είκοσι θέσεις δεν σε πειράζει). Να σκέφτεσαι πάντα ότι ο κώδικας κάτι εισάγει και κάτι εξάγει, και να θέτεις τι είναι αυτά και να σκέφτεσαι πως θα τα υλοποιήσεις. Να προσθέσω βέβαια και μια λύση που δεν κάνει ταξινόμηση με το συνήθη τρόπο, και αυτό θα ήταν ωραίο να το δώσεις ως απάντηση! Βάλε τυχαία είκοσι από τα χρώματα και μετά μέτρα πόσα έχει από το καθένα και γέμισε ξανά τον πίνακα με τρεις επαναλήψεις, βάσει των μετρήσεων που παίρνεις, και κάθε επόμενο μπλοκ επανάληψης θα ξεκινάει από την τελευταία θέση που άλλαξες τιμή συν ένα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα