Поглиблений курс розробки на Python
Розділ
>
Рівень
Просунуті класи
Перевантаження операторів
Мета
Підрахуйте, скільки вина проходить процес очищення, використовуючи вектори та перевантаження операторів.
Після віджиму вина його потрібно профільтрувати та очистити. Декілька бочок проходять фільтрацію, і їхній обсяг потрібно промити. Важливо підрахувати, скільки вина виробляється, щоб бочки могли бути запечатані та залишені на витримку.
Для цього вам потрібно створити вектори та скласти їх разом. Вектори подібні до списків, але не такі гнучкі, при цьому вони ефективніші за використання пам’яті. Зазвичай їх використовують для роботи з координатами, в даному випадку ми використовуватимемо їх як змінні, які зберігають більше одного значення. Додавання векторів виконується за допомогою перевантаження операторів, який розширює функціональність об’єктів класу для того, щоб використовувати оператори з ними, як зі звичайними значеннями.
Для початку перейдіть і зберіть металеві контейнери з водою, розташовані на верхній частині кімнати; вони знадобляться для промивання вина, яке проходить фільтрацію в бочках. Після збирання перейдіть до темної позначки «X» на червоному килимі, зверніться до бочки та почніть векторизацію вмісту кожної бочки.
Позначки «X» розташовані групами по три для кожного кольорового килима: золотиста позначка «X», світла позначка «X» та темна позначка «X». На всіх темних та світлих позначках «X» використовуйте функцію water() для промивання бочок. Також на темних і світлих позначках «X» використовуйте функцію read() для визначення, скільки вина обробляється в цій колонці бочок. На золотій позначці «X» використовуйте функцію write() для запису сумарного значення кількостей.
В редакторі коду є клас з назвою vector, який використовується для того, щоб не тільки створювати вектори, а й додавати їх разом. Створюйте об’єкти vector для збереження даних, отриманих із світлих та темних позначок «X». Наприклад, на килимах red фільтрується червоне вино:
# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light
У векторі перша позиція називається x, а друга — y; формула виглядає так: object_name = vector(x,y). Це важливо для заповнення векторів інформацією, отриманою за допомогою функції read().
На золотих позначках «X» використовуйте функцію write() для запису сумарних значень для кожного набору векторів. Наприклад, у випадку позначок «X» на червоному килимі це записується так:
await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)
Не забувайте додавати .x та .y наприкінці, щоб вказати значення кожного вектора.
Для кожного набору кольорових килимів фільтрується різний тип вина. На згаданому килимі red фільтрується red_wine; на килимах yellow фільтрується sparkling_wine; на килимах green фільтрується white_wine; а на килимах orange фільтрується orange_wine.
Як тільки всі світлі та темні позначки «X» будуть промиті за допомогою функції water(), а на всіх золотих позначках «X» буде записана сума, ви завершите рівень.