Python. Классы

Лабораторная работа «Классы  Python»

1. Реализуйте класс Vector для работы с трехмерными векторами. Должны быть реализованы функции создания и векторов, сложения, вычитания, умножения на число, скалярного и векторного произведения. Векторы выводить в виде (1;-2;3).

2. Реализуйте класс Stack, моделирующий работу стека.  Стек — это структура данных, работа с которой определяется принципом LIFO (Last In First Out) — последний пришел, первый вышел.

Стек может быть инициализирован различным числом элементов.

Например,

s = Stack(1, 2, 3, 4, 5) — создаёт стек [5 -> 4 -> 3 -> 2 -> 1], а s = Stack(1, 2, 3) — создаёт стек [3 -> 2 -> 1].

При этом для инициализации передаётся хотя бы один параметр.

Класс Stack реализует следующие методы:

  • append(self,∗values) — добавляет переданные значения последовательно на вершину стека (как минимум одно).
  • copy(self) — создаёт копию данного стека, то есть возвращает новый стек.
  • pop(self) — вытаскивает и возвращает элемент с вершины стека, при этом этот элемент из стека пропадает. Если стек пустой, то возвращает None.
  • extend(self,stack) — расширяет данный стек другим, вынимая значения из второго и добавляя по правилам стека в первый.
  • next(self) — возвращает новый стек, начиная со следующего элемента текущего.

Операторы и встроенные функции:

  • stack1 + stack2 — Сложение стеков. В результате создаётся новый стек.
  • stack1+ = stack2 — Расширяет первый стек вторым.
  • stack1 == stack2 — Проверяет стеки на равенство всех элементов.
  • stack >> N — создаёт новый стек без первых N (вышедших) элементов.
  • str(stack) — приводит стек к строке вида [sn -> … -> s3 -> s2 -> s1]. Пустой или ошибочный стек представляется как [].
  • next(stack) — действие, аналогичное методу next().

Пример

Ввод Вывод
Stacks1 = Stack(1, 2, 3)
print(s1)
s1.append(4, 5)
print(s1)
s2 = s1.copy()
sx = s1.copy()
print(sx.pop())
print(sx)
print(s2)
print(s1 == s2, id(s1) == id(s2))
s3 = s2.next()
print(s1, s2, s3, sep = '\n')
print(s1 + s3)
s3.extend(Stack(1, 2))
print(s3)
s4 = Stack(1, 2)
s4 += s3 >> 4
print(s4)
s5 = next(s4)
print(s4)
print(s5)
s6 = s5.next()
print(s4, s5, s6, sep = '\n')
[3 -> 2 -> 1]
[5 -> 4 -> 3 -> 2 -> 1] 
5 
[4 -> 3 -> 2 -> 1] 
[5 -> 4 -> 3 -> 2 -> 1] 
True False 
[5 -> 4 -> 3 -> 2 -> 1] 
[5 -> 4 -> 3 -> 2 -> 1] 
[4 -> 3 -> 2 -> 1] 
[4 -> 3 -> 2 -> 1 -> 5 -> 4 -> 3 -> 2 -> 1] 
[2 -> 1 -> 4 -> 3 -> 2 -> 1] 
[2 -> 1 -> 2 -> 1] 
[2 -> 1 -> 2 -> 1] 
[1 -> 2 -> 1] 
[2 -> 1 -> 2 -> 1] 
[1 -> 2 -> 1] 
[2 -> 1]

P.S. Задание подготовлено на основе заданий, предлагаемых проектом Яндекс Лицей.

Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.