Добавить в корзинуПозвонить
Найти в Дзене
Варечка Окаянная

Python МГУ МФК часть 11 осень 2023

Всем привет! Я тут подумала хорошо будет поделиться своими решениями по питону! Пожалуйста подпишитесь на мой канал про мою жизнь в МГУ "Варечка Окаянная"))) Вам необходимо сделать класс \texttt{Incapsulator}, который хранит в своём атрибуте одно число и предоставляет два метода: \texttt{set_value} и \texttt{get_value}, а также конструктор с одним дополнительным параметром \texttt{value}. Значение по умолчанию должно быть равно 0. Объектами вашего класса будут пользоваться так: \begin{verbatim} a = Incapsulator() a.get_value() 0 a.set_value(5.0) a.get_value() 5.0 a.set_value(-1.0) a.get_value() -1.0 \end{verbatim} Ответ: class Incapsulator:
def __init__(self, value=0):
self._value = value
def set_value(self, value):
self._value = value
def get_value(self):
return self._value Следует описать класс \texttt{Student}, который будет разрешать сконструировать объект только с явным указанием параметров \texttt{name} и \texttt{age}. При этом, следующие к
Оглавление

python 2023 a 11 ОПП

Введение.

Всем привет! Я тут подумала хорошо будет поделиться своими решениями по питону! Пожалуйста подпишитесь на мой канал про мою жизнь в МГУ "Варечка Окаянная")))

1. Инкапсулятор

Вам необходимо сделать класс \texttt{Incapsulator}, который хранит в своём атрибуте одно число и предоставляет два метода: \texttt{set_value} и \texttt{get_value}, а также конструктор с одним дополнительным параметром \texttt{value}. Значение по умолчанию должно быть равно 0.

Объектами вашего класса будут пользоваться так: \begin{verbatim}

a = Incapsulator() a.get_value() 0 a.set_value(5.0) a.get_value() 5.0 a.set_value(-1.0) a.get_value() -1.0 \end{verbatim}

Ответ:

class Incapsulator:
def __init__(self, value=0):
self._value = value

def set_value(self, value):
self._value = value

def get_value(self):
return self._value

2. Класс Student

Следует описать класс \texttt{Student}, который будет разрешать сконструировать объект только с явным указанием параметров \texttt{name} и \texttt{age}. При этом, следующие команды должны отработать корректно (т.е. вывод должен совпадать с тем, что указан в примере ниже):

\begin{verbatim}

a = Student() Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> a = Student() TypeError: Student.init() missing 2 required positional arguments: 'name' and 'age'
a = Student("Ivan", 18) a Student(Ivan, 18.0) print(a) Student Ivan of age 18.0
a = Student("Ivan", 18.0) a Student(Ivan, 18.0) print(a) Student Ivan of age 18.0 \end{verbatim}

Примечания:

  • В качестве решения задачи нужно предоставить только код с описанием соответствующего класса. Никаких объектов создавать не нужно.
  • При создании объекта \texttt{a = Student()} вывод может несколько отличаться от того, что указано в примере. Главное, чтобы в нём присутствовала строка: \texttt{TypeError: Student.__init__() missing 2 required positional arguments: 'name' and 'age'}.
  • Обратите внимание на названия параметров, которые передаются в конструктор. Они должны в точности совпадать с теми, что указаны в примере.
  • При реализации класса нужно будет дополнительно реализовать методы \texttt{__str__()} и \texttt{__repr__()}.
  • Не забывайте про нижние подчёркивания в реализации некоторых методов. Это важно!
  • Обратите внимание, что в качестве возраста может передаваться как строка, так и целое число. Оно должно быть всегда преобразовано к типу \texttt{float} в конструкторе!

Ответ:

class Student:
def __init__(self, name, age):
self.name = name
self.age = float(age)

def __str__(self):
return f"Student {self.name} of age {self.age}"

def __repr__(self):
return f"Student({self.name}, {self.age})"

3. Счётчик

Создайте класс \texttt{SpyingNumber}, который позволяет выполнять арифметические операции с числами и отслеживать количество выполненных операций. Класс должен включать следующие методы:

  • __init__
  • __add__
  • __sub__
  • __mul__
  • __truediv__
  • get_global_counter
  • reset_global_counter

Примечания:

  • В качестве решения задачи нужно предоставить только код с описанием соответствующего класса. Никаких объектов создавать не нужно.
  • Обратите внимание на названия методов и их реализацию.

Ответ:

class SpyingNumber:
_global_counter = 0 # Class-level attribute to count arithmetic operations

def __init__(self, value):
self.value = value

def __str__(self):
return str(self.value)

def __repr__(self):
return f"SpyingNumber({self.value})"

@staticmethod
def get_global_counter():
return SpyingNumber._global_counter

@staticmethod
def reset_global_counter():
SpyingNumber._global_counter = 0

@staticmethod
def _increment_counter():
SpyingNumber._global_counter += 1

def __add__(self, other):
if isinstance(other, (int, float)):
other = SpyingNumber(other)
SpyingNumber._increment_counter()
return SpyingNumber(self.value + other.value)

def __sub__(self, other):
if isinstance(other, (int, float)):
other = SpyingNumber(other)
SpyingNumber._increment_counter()
return SpyingNumber(self.value - other.value)

def __mul__(self, other):
if isinstance(other, (int, float)):
other = SpyingNumber(other)
SpyingNumber._increment_counter()
return SpyingNumber(self.value * other.value)

def __truediv__(self, other):
if isinstance(other, (int, float)):
other = SpyingNumber(other)
SpyingNumber._increment_counter()
return SpyingNumber(self.value / other.value)

4. Объект прогрессии

Создайте класс \texttt{GeomRange} с методами __init__, __getitem__, и __iter__, а также класс-итератор \texttt{GeomRangeIterator} с методом __next__ для итераций по геометрической прогрессии.

При этом, объекты реализованного класса могут использоваться следующим образом: \begin{verbatim}

for x in GeomRange(1, 10, 2): print(x) 1 2 4 8 for x in GeomRange(1, 1, 2): print(x)
for x in GeomRange(1, 100, 3): print(x)

1 3 9 27 81

g = GeomRange(1, 100, 3) next(g) Traceback (most recent call last): File "", line 1, in next(g) TypeError: 'GeomRange' object is not an iterator it = iter(g) next(it) 1 next(it) 3 next(it) 9 next(it) 27 next(it) 81 next(it) Traceback (most recent call last): File "", line 1, in next(it) File "solution4.py", line 12, in next else: StopIteration g = GeomRange(1, 100, 3) g[0] 1 g[1] 3 g[2] 9 g[3] 27 g[4] 81 g[5] Traceback (most recent call last): File "", line 1, in g[5] File "solution4.py", line 33, in getitem raise IndexError("index is out of the progression") IndexError: index is out of the progression \end{verbatim}

Примечания: В качестве решения задачи нужно предоставить только код с описанием соответствующего класса. Никаких объектов создавать не нужно.

Ответ:

class GeomRange:
def __init__(self, start, stop=None, step=2):
if stop is None:
self.start = 1
self.stop = start
self.step = stop if stop else 2
else:
self.start = start
self.stop = stop
self.step = step

def __getitem__(self, index):
value = self.start
for i in range(index):
value *= self.step
if value >= self.stop:
raise IndexError("index is out of the progression")
return value

def __iter__(self):
return GeomRangeIterator(self.start, self.stop, self.step)

class GeomRangeIterator:
def __init__(self, start, stop, step):
self.current = start
self.stop = stop
self.step = step

def __iter__(self):
return self

def __next__(self):
if self.current >= self.stop:
raise StopIteration
current = self.current
self.current *= self.step
return current


Спасибо!

Телеграмм Свалка астронома Ai 🦄 MSU

Телеграмм Варечкин Блокнот 🌸 MSU

ВК Школа https://vk.com/mgu_gdz Физиув UwU

Дзен https://dzen.ru/varechka_uni_physics

-2