Η τάξη του νηπιαγωγείου μαθαίνει για την καλλιέργεια φυτών. Η νηπιαγωγός σκέφτηκε ότι θα ήταν καλή ιδέα να δώσει στην τάξη σπόρους για να φυτέψουν και να μεγαλώσουν στο χώμα. Για τον σκοπό αυτό, τα παιδιά έβαλαν μικρά ποτηράκια κατά μήκος των περβαζιών και φύτεψαν ένα είδος φυτού σε κάθε ποτηράκι. Τα παιδιά είχαν την ευκαιρία να διαλέξουν τα αγαπημένα τους από τέσσερα διαθέσιμα είδη σπόρων: grass, clover, radishes και violets.
Η αποστολή σου είναι, με δεδομένο ένα διάγραμμα, να προσδιορίσεις για ποια φυτά είναι υπεύθυνο κάθε παιδί της τάξης του νηπιαγωγείου.
Στην τάξη υπάρχουν 12 παιδιά:
Φυτεύονται τέσσερα διαφορετικά είδη σπόρων:
| Φυτό | Κωδικοποίηση στο διάγραμμα |
|---|---|
| Grass | G |
| Clover | C |
| Radish | R |
| Violet | V |
Κάθε παιδί παίρνει τέσσερα κύπελλα, δύο σε κάθε σειρά:
[window][window][window]
........................ # each dot represents a cup
........................
Η δασκάλα τους αναθέτει τα κύπελλα στα παιδιά αλφαβητικά με βάση τα ονόματά τους, που σημαίνει ότι η Alice έρχεται πρώτη και ο Larry τελευταίος.
Ακολουθεί ένα παράδειγμα διαγράμματος που αναπαριστά τα φυτά της Alice:
[window][window][window]
VR......................
RG......................
Στην πρώτη σειρά, πιο κοντά στα παράθυρα, έχει ένα violet και ένα radish. Στη δεύτερη σειρά έχει ένα radish και λίγο grass.
Το πρόγραμμά σου θα λάβει τα φυτά από αριστερά προς τα δεξιά, ξεκινώντας από τη σειρά που βρίσκεται πιο κοντά στα παράθυρα. Από αυτό, θα πρέπει να μπορεί να προσδιορίσει ποια φυτά ανήκουν σε κάθε μαθητή.
Για παράδειγμα, αν του δοθεί ότι ο κήπος μοιάζει κάπως έτσι:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
Τότε, αν του ζητηθούν τα φυτά της Alice, θα πρέπει να δώσει:
Ενώ, αν ζητηθούν τα φυτά του Bob, θα δώσει:
Τα tests αυτής της άσκησης περιμένουν το πρόγραμμά σου να είναι υλοποιημένο ως μια class Garden (δες επίσης classes).
Αν δεν είσαι εξοικειωμένος με τις κλάσεις στην Python, αυτό το σεμινάριο του Real Python θα μπορούσε να είναι ένα καλό επιπλέον σημείο εκκίνησης.
Η class σου θα πρέπει να υλοποιεί μια method με το όνομα plants, η οποία δέχεται το όνομα ενός μαθητή ως όρισμα και επιστρέφει τη list με τα ονόματα των φυτών που ανήκουν σε αυτόν τον μαθητή.
Η δημιουργία του κήπου του παραδείγματος:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
θα αναπαρίστατο, στα tests, ως Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV").
Για να λειτουργήσει αυτή η αναπαράσταση, η class σου θα χρειαστεί να υλοποιήσει μια ειδική μέθοδο __init__().
Αν δεν είσαι εξοικειωμένος με το __init__() ή τους κατασκευαστές, τα αντικείμενα κλάσης και στιγμιοτύπων από την τεκμηρίωση της Python δίνουν μια πιο αναλυτική εξήγηση.
Σε κάποια tests, μια list μαθητών περνιέται ως όρισμα στο __init__().
Αυτό θα πρέπει να υπερισχύει του καταλόγου με τους δώδεκα μαθητές που δίνεται στην εκφώνηση του προβλήματος.
Και οι δύο αυτές εντολές πρέπει να λειτουργούν με τη μέθοδο __init__() σου:
# Make a garden based on the default 12-student roster.
Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV")
# Make a garden based on a 2-student roster.
Garden("VRCC\nVCGG", students=["Valorie", "Raven"])
Μια προσέγγιση είναι να κάνεις τη list των μαθητών ένα προεπιλεγμένο όρισμα; η τεκμηρίωση της Python περιγράφει αναλυτικά τις default parameters εξηγώντας παράλληλα τους ορισμούς συναρτήσεων.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.