Kodomo

Пользователь

Задание

как и в прошлый раз

Оценка за задание есть наибольшая из оценок за решённые задачи.

Задание должно быть выложено в репозиторий homework, который должен быть выложен на bitbucket. В противном случае, вне зависимости от задачи вы получаете не более 6 баллов.

Если вы хотите получить оценку выше 8 баллов, код должен быть чистым и читаемым (по существу я этого требовал и раньше). Т.е. все функции, переменные и классы имеют содержательные и понятные названия. Схема именования сущностей в одном типе сущностей однородна (т.е. либо везде сокращения, либо везде полные слова). Функции не бывают длиннее ~10 строк и не делают больше одного дела. Строки не бывают длиннее 75 символов (включая отступы). Внутри строк есть одна политика на тему того, как ставить пробелы. Части кода расположены стандартным образом: импорты -> константы и глобальные переменные -> определения (функций и классов) -> if __name__ == "__main__". Нет дублирования кода.

Я настоятельно рекомендую писать чистый код изначально (да, это значит, что иногда в очевидных, казалось бы, местах приходится на 10 минут задуматься над названием переменной), потому что так быстрее получить рабочую программу. Всё равно основное время уходит на отладку, а не на написание.

только сейчас!

В решении обязательно должен использоваться полиморфизм (т.е. ситуация, когда вы вызываете метод у объекта, не зная, к какому из классов объект принадлежит), иначе решение считается недостаточно простым и к задаче добавляется ещё несколько видов фигур и их поведения.

Некоторые из задач проще решать используя наследование, а некоторые не используя. Я не требую наличия наследования в решении, но, как и раньше, если вы хотите получить больше 8 баллов, дублирования ощутимого количества кода быть не должно (вы можете выносить дублирующиеся части в функции, которые со всем успехом могут быть вне любых классов – в этом нет ничего предосудительного).

  1. (6 баллов) Напишите программу, которая рисует на экране 10 кругов и 10 квадратов в случайных местах. При клике мышью по кругу, он перечёркивается горизонтальной линией. При клике мышью по квадрату, он перечёркивается вертикальной линией.

  2. (8 баллов) Напишите программу, которая при клике по экрану правой кнопкой мыши (событие '<3>') создаёт под мышью кружок или квадрат (выбор случайный); при клике левой кнопкой мыши по фигуре, она меняет цвет на случайный, и последующие фигуры той же формы будут создаваться того же цвета. (Т.е. при клике мыши в круг мы меняем то, какого цвета круги будут создаваться впредь, а при клике мыши в квадрат мы меняем то, какого цвета квадраты будут создаваться впредь). При этом круги по клику мыши ещё и отпрыгивают.

  3. (10 баллов) Аналогично задаче 2. При клике по объекту средней кнопкой мыши (событие '<2>'), его можно добавить/убрать из выделения. При движении мыши с зажатой левой кнопкой все объекты выделения двигаются настолько же, насколько и мышь. (Полезные события: '<B1-Motion>' – мышь движется, при этом левая кнопка зажата; <ButtonPress-1> – левая кнопка нажимается, <ButtonRelease-1> – левая кнопка отпускается)