Задачи объектно ориентированного программирования python

Класс Python — Упражнения, практика, решение

3. Напишите класс Python, чтобы найти правильность строки скобок, ‘(‘, ‘)’, », ‘[‘ и ‘]. Эти скобки должны быть закрыты в правильном порядке, например, «()» и «() [] <>» допустимы, но «[)», «(

4. Напишите класс Python, чтобы получить все возможные уникальные подмножества из набора различных целых чисел. — Перейти к редактору
Вход: [4, 5, 6]
Вывод: [[], [6], [5], [5, 6], [4], [4, 6], [4, 5], [4, 5, 6]]

5. Напишите класс Python, чтобы найти пару элементов (индексы двух чисел) из данного массива, сумма которых равна конкретному целевому числу. — Перейти к редактору
Ввод: цифры = [10,20,10,40,50,60,70], цель = 50
Выход: 3, 4

6. Напишите класс Python, чтобы найти три элемента, которые суммируют до нуля из набора из n действительных чисел. — Перейти к редактору
Входной массив: [-25, -10, -7, -3, 2, 4, 8, 10]
Выход: [[-10, 2, 8], [-7, -3, 10]]

7. Напишите класс Python для реализации pow (x, n). — Перейти к редактору

8. Напишите класс Python, чтобы поменять строку слово за словом. — Перейти к редактору
Входная строка: ‘привет. Py’
Ожидаемый результат: ‘.py hello’

9. Напишите класс Python, который имеет два метода get_String и print_String. get_String принимает строку от пользователя и print_String печатает строку в верхнем регистре. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

Читайте также:  Входная переменная в программировании

10. Напишите класс Python с именем Rectangle, построенный по длине и ширине, и метод, который будет вычислять площадь прямоугольника. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

11. Напишите класс Python с именем Circle, построенный по радиусу, и два метода, которые будут вычислять площадь и периметр круга. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

12. Напишите программу на Python, чтобы получить имя класса экземпляра в Python. — Перейти к редактору
Нажмите меня, чтобы увидеть решение

Редактор кода Python:

Еще не все !

Не отправляйте решение вышеупомянутых упражнений здесь, если вы хотите внести вклад, перейдите на соответствующую страницу упражнения.

Источник

Задачи 1 неделя ООП Python

Python — это процедурно-ориентированный и одновременно объектно-ориентированный язык программирования.

Процедурно-ориентированный

«Процедурно-ориентированный» подразумевает наличие функций. Программист может создавать функции, которые затем используются в сторонних скриптах.

Объектно-ориентированный

«Объектно-ориентированный» подразумевает наличие классов. Есть возможность создавать классы, представляющие собой прототипы для будущих объектов.

Синтаксис для написания нового класса:

class ClassName: 'Краткое описание класса (необязательно)' # Код . 
  • Для создания класса пишется ключевое слово class , его имя и двоеточие (:). Первая строчка в теле класса описывает его. (По желанию) получить доступ к этой строке можно с помощью ClassName.__doc__
  • В теле класса допускается объявление атрибутов, методов и конструктора.

Атрибут:

Атрибут — это элемент класса. Например, у прямоугольника таких 2: ширина ( width ) и высота ( height ).

Метод:

  • Метод класса напоминает классическую функцию, но на самом деле — это функция класса. Для использования ее необходимо вызывать через объект.
  • Первый параметр метода всегда self (ключевое слово, которое ссылается на сам класс).

Конструктор:

  • Конструктор — уникальный метод класса, который называется __init__ .
  • Первый параметр конструктора во всех случаях self (ключевое слово, которое ссылается на сам класс).
  • Конструктор нужен для создания объекта.
  • Конструктор передает значения аргументов свойствам создаваемого объекта.
  • В одном классе всегда только один конструктор.
  • Если класс определяется не конструктором, Python предположит, что он наследует конструктор родительского класса.

Что происходит при создании объекта с помощью класса?

При создании объекта класса Rectangle запускается конструктор выбранного класса, и атрибутам нового объекта передаются значения аргументов. Как на этом изображении:

Конструктор с аргументами по умолчанию

В других языках программирования конструкторов может быть несколько. В Python — только один. Но этот язык разрешает задавать значение по умолчанию.

Все требуемые аргументы нужно указывать до аргументов со значениями по умолчанию.

Согласно модели данных Python, язык предлагает три вида методов: статические, класса и экземпляра класса. Давайте посмотрим, что же происходит за кулисами каждого из видов методов. Понимание принципов их работы поможет в создании красивого и эффективного кода. Начнём с самого простого примера, в котором демонстрируются все три вида методов.

Задача 1. Необходимо реализовать код, показанный в примерах выше. Создать класс Rectangle и класс ToyClass. Для ToyClass необходимо добавить три атрибута, и метод который устанавливает их.

Задача 2. Напишите программу с классом Student, в котором есть три атрибута: name, groupNumber и age. По умолчанию name = Ivan, age = 18, groupNumber = 10A. Необходимо создать пять методов: getName, getAge, getGroupNumber, setNameAge, setGroupNumber. Метод getName нужен для получения данных об имени конкретного студента, метод getAge нужен для получения данных о возрасте конкретного студента, vетод setGroupNumberнужен для получения данных о номере группы конкретного студента. Метод SetNameAge позволяет изменить данные атрибутов установленных по умолчанию, метод setGroupNumber позволяет изменить номер группы установленный по умолчанию. В программе необходимо создать пять экземпляров класса Student, установить им разные имена, возраст и номер группы.

Задача 3. Напишите программу с классом Math. Создайте два атрибута — a и b. Напишите методы addition — сложение, multiplication — умножение, division — деление, subtraction — вычитание. При передаче в методы параметров a и b с ними нужно производить соответствующие действия и печатать ответ.

Задача 4. Напишите программу с классом Car. Создайте конструктор класса Car. Создайте атрибуты класса Car — color (цвет), type (тип), year (год). Напишите пять методов. Первый — запуск автомобиля, при его вызове выводится сообщение «Автомобиль заведен». Второй — отключение автомобиля — выводит сообщение «Автомобиль заглушен». Третий — присвоение автомобилю года выпуска. Четвертый метод — присвоение автомобилю типа. Пятый — присвоение автомобилю цвета.

Источник

Задачи

Вспомните про unittest и по возможности оформите тесты как юниттесты.

Реализуйте класс Matrix.

Вся матрица должна хранится в виде 1 (ОДНОГО ОДНОМЕРНОГО) списка.

Конструктор

Конструктор от списка списков. Гарантируется, что списки состоят из чисел, не пусты и все имеют одинаковый размер. Конструктор должен копировать содержимое списка списков, т.е. при изменении списков, от которых была сконструирована матрица, содержимое матрицы изменяться не должно.

__str__

Метод __str__ переводящий матрицу в строку. При этом элементы внутри одной строки должны быть разделены знаками табуляции, а строки — переносами строк. При этом после каждой строки не должно быть символа табуляции и в конце не должно быть переноса строки.

size

Метод size без аргументов, возвращающий кортеж вида (число строк, число столбцов)

reshape

Устанавливает новые параметры количества строк и столбцов. С проверкой на корректность.

Тест 1 Входные данные: # Task 1 check 1 m = Matrix([[1, 0], [0, 1]]) print(m) m = Matrix([[2, 0, 0], [0, 1, 10000]]) print(m) m = Matrix([[-10, 20, 50, 2443], [-5235, 12, 4324, 4234]]) print(m) Вывод программы: 1 0 0 1 2 0 0 0 1 10000 -10 20 50 2443 -5235 12 4324 4234 Тест 2 Входные данные: # Task 1 check 2 m1 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]]) m2 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]]) print(str(m1) == str(m2)) Вывод программы: True Тест 3 Входные данные: # Task 1 check 3 m = Matrix([[1, 1, 1], [0, 100, 10]]) print(str(m) == '1\t1\t1\n0\t100\t10') Вывод программы: True 

сложение и умножение

  • __add__ принимающий вторую матрицу того же размера и возвращающий сумму матриц
  • __mul__ принимающий число типа int или float и возвращающий матрицу, умноженную на скаляр
  • __rmul__ делающий то же самое, что и __mul__. Этот метод будет вызван в том случае, аргументнаходится справа. Можно написать __rmul__ = __mul__

В этом случае вызовется __mul__: Matrix([[0, 1], [1, 0]) 10 В этом случае вызовется __rmul__ (так как у int не определен __mul__ для матрицы справа): 10 Matrix([[0, 1], [1, 0])

Разумеется, данные методы не должны менять содержимое матрицы.

Тест 1 Входные данные: # Task 2 check 1 m = Matrix([[10, 10], [0, 0], [1, 1]]) print(m.size()) Вывод программы: (3, 2) Тест 2 Входные данные: # Task 2 check 2 m1 = Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) m2 = Matrix([[0, 1, 0], [20, 0, -1], [-1, -2, 0]]) print(m1 + m2) Вывод программы: 1 1 0 20 1 -1 -1 -2 1 Тест 3 Входные данные: # Task 2 check 3 m = Matrix([[1, 1, 0], [0, 2, 10], [10, 15, 30]]) alpha = 15 print(m * alpha) print(alpha * m) Вывод программы: 15 15 0 0 30 150 150 225 450 15 15 0 0 30 150 150 225 450 

__add__ — проверка корректности

Добавьте в программу из предыдущей задачи класс MatrixError, содержащий внутри self поля matrix1 и matrix2 (ссылки на матрицы).

Добавьте в метод add проверку на ошибки в размере входных данных, чтобы при попытке сложить матрицы разных размеров было выброшено исключение MatrixError таким образом, чтобы matrix1 поле MatrixError стало первым аргументом add (просто self), а matrix2 — вторым (второй операнд для сложения).

транспонирование

  • Реализуйте метод transpose, транспонирующий матрицу и возвращающую результат (данный метод модифицирует экземпляр класса Matrix)
  • Реализуйте статический метод transposed, принимающий Matrix и возвращающий транспонированную матрицу.

Подумайте, надо ли делать транспонирование методом класса или статическим методом?

Тест 1 Входные данные: # Task 3 check 1 # Check exception to add method m1 = Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) m2 = Matrix([[0, 1, 0], [20, 0, -1], [-1, -2, 0]]) print(m1 + m2) m2 = Matrix([[0, 1, 0], [20, 0, -1]]) try: m = m1 + m2 print('WA\n' + str(m)) except MatrixError as e: print(e.matrix1) print(e.matrix2) Вывод программы: 1 1 0 20 1 -1 -1 -2 1 1 0 0 0 1 0 0 0 1 0 1 0 20 0 -1 Тест 2 Входные данные: # Task 3 check 2 m = Matrix([[10, 10], [0, 0], [1, 1]]) print(m) m1 = m.transpose() print(m) print(m1) Вывод программы: 10 10 0 0 1 1 10 0 1 10 0 1 10 0 1 10 0 1 Тест 3 Входные данные: # Task 3 check 3 m = Matrix([[10, 10], [0, 0], [1, 1]]) print(m) print(Matrix.transposed(m)) print(m) Вывод программы: 10 10 0 0 1 1 10 0 1 10 0 1 10 10 0 0 1 1 

solve

Пусть экземпляр класса Matrix задаёт систему линейных алгебраических уравнений.

Тогда добавьте в класс метод solve, принимающий вектор-строку свободных членови возвращающий строку-список, состоящую из float — решение системы, если оно единственно. Если решений нет или оно не единственно — выдайте какую-нибудь ошибку.

Тест 1 Входные данные: # Task 5 check 1 m = Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) print(m.solve([1,1,1])) Вывод программы: [1.0, 1.0, 1.0] Тест 2 Входные данные: # Task 5 check 2 m = Matrix([[1, 1, 1], [0, 2, 0], [0, 0, 4]]) print(m.solve([1,1,1])) Вывод программы: [0.25, 0.5, 0.25] Тест 3 Входные данные: # Task 5 check 3 m = Matrix([[1, 1, 1], [0, 1, 2], [0.5, 1, 1.5]]) try: s = m.solve([1,1,1]) print('WA No solution') except Exception as e: print('OK') Вывод программы: OK 

возведение в степень

К программе в предыдущей задаче добавьте класс SquareMatrix — наследник Matrix с операцией возведенияв степень __pow__, принимающей натуральную (с нулём) степень, в которую нужно возвести матрицу. Используйте быстрое возведение в степень.

Тест 1 Входные данные: # Task 6 check 1 m = SquareMatrix([[1, 0], [0, 1]]) print(isinstance(m, Matrix)) Вывод программы: True Тест 2 Входные данные: # Task 6 check 2 m = SquareMatrix([[1, 0], [0, 1]]) print(m ** 0) Вывод программы: 1 0 0 1 Тест 3 Входные данные: # Task 6 check 3 m = SquareMatrix([[1, 1, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1]] ) print(m) print('----------') print(m ** 1) print('----------') print(m ** 2) print('----------') print(m ** 3) print('----------') print(m ** 4) print('----------') print(m ** 5) Вывод программы: 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 ---------- 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 ---------- 1 2 1 0 0 0 0 1 2 1 0 0 0 0 1 2 1 0 0 0 0 1 2 1 0 0 0 0 1 2 0 0 0 0 0 1 ---------- 1 3 3 1 0 0 0 1 3 3 1 0 0 0 1 3 3 1 0 0 0 1 3 3 0 0 0 0 1 3 0 0 0 0 0 1 ---------- 1 4 6 4 1 0 0 1 4 6 4 1 0 0 1 4 6 4 0 0 0 1 4 6 0 0 0 0 1 4 0 0 0 0 0 1 ---------- 1 5 10 10 5 1 0 1 5 10 10 5 0 0 1 5 10 10 0 0 0 1 5 10 0 0 0 0 1 5 0 0 0 0 0 1 

Uno card game (на дом)

Добавить карты +2, skip, wild, wild+4

Источник

Оцените статью