Клас у дитячому садку вивчає вирощування рослин. Вихователю спало на думку дати класу насіння, щоб посадити його та виростити в землі. Для цього діти розставили маленькі скляночки на підвіконнях і посадили в кожну скляночку один вид рослини. Діти могли обрати свої улюблені з чотирьох доступних видів насіння: 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......................
У першому рядку, найближчому до вікон, у неї є фіалка і редиска. У другому рядку в неї редиска і трохи трави.
Програма отримає рослини зліва направо, починаючи з рядка, найближчого до вікон. З цього вона зможе визначити, які рослини належать кожній дитині.
Наприклад, якщо сказано, що садок має такий вигляд:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
Тоді, якщо запитати про рослини Alice, вона повинна повернути:
А якщо запитати про рослини Bob, то отримаємо:
Тести для цієї вправи очікують, що програму реалізовано як class Garden (див. також classes).
Якщо ми не знайомі з класами в Python, цей туторіал від Real Python може стати гарним додатковим місцем, з якого варто почати.
class має реалізувати method із назвою plants, який приймає імʼя учня як аргумент і повертає list назв рослин, що належать цьому учневі.
Створення саду з прикладу:
[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV
у тестах буде представлено як Garden("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV").
Щоб таке представлення працювало, class має реалізувати __init__() спеціальний метод.
Якщо ми не знайомі з __init__() чи конструкторами, докладніше це пояснює розділ обʼєкти класів і екземплярів з документації Python.
У деяких тестах до __init__() як аргумент передають list учнів.
Це має замінити перелік із дванадцяти учнів, наведений в умові задачі.
Обидві ці інструкції мають працювати з методом __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 вправ та справжнє наставництво від людей, і все це безкоштовно.