ЛБ11
.docx
Инженерная школа природных ресурсов
Направление подготовки Химическая технология
Отделение химической инженерии
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА PYTHON
Отчет по лабораторной работе № 11
Основы объектно-ориентированного программирования (ООП)
Выполнил студент гр. ХИМ54 А.В. Чижова
(Подпись)
01.01.2026 г.
Отчет принят:
Преподаватель
доцент ОХИ ИШПР, к.т.н. В.А. Чузлов
(Подпись)
_____ _____________ 2026 г.
Томск 2026 г.
Задание 1
Необходимо реализовать собственный итератор HCGen, генерирующий последовательность формул алканов от CH4 до заданного пользователем конечного числа атомов углерода в молекуле алкана.
Программная реализация:
class HCGen:
def __init__(self, n: int) -> None:
if not isinstance(n, int) or n < 0:
raise ValueError(f'{n} is not a positive integer number')
self._n: int = n
self._i: int = 0
return
def __iter__(self):
return self
def __next__(self) -> str | StopIteration:
self._i += 1
if(self._i == 1):
return 'CH4'
if self._i <= self._n:
return f'C{self._i}H{(self._i+1)*2}'
else:
raise StopIteration
hc_gen = HCGen(10)
for hc in hc_gen:
print(hc, end=' ')
Ответ:
CH4 C2H6 C3H8 C4H10 C5H12 C6H14 C7H16 C8H18 C9H20 C10H22
Задание 2
Дополните реализацию класса HCGen возможностью задавать начальное значение числа атомов углерода в молекуле алкана, а также возможностью задавать шаг, с которым итератор будет выдавать формулы алканов. Начальные значения числа атомов углерода и шага по умолчанию должны быть равны 1.
Программная реализация:
class HCGen:
def __init__(self, start: int, end: int, step: int = 1) -> None:
if not isinstance(start, int) or not isinstance(end, int) or not isinstance(step, int) or start < 0 or step < 0 or start > end:
raise ValueError('Incorrect values')
self._end: int = end
self._step: int = step
self._i: int = start
return
def __iter__(self):
return self
def __next__(self) -> str | StopIteration:
if(self._i == 1):
self._i += self._step
return 'CH4'
if self._i <= self._end:
result = f'C{self._i}H{(self._i+1)*2}'
self._i += self._step
return result
else:
raise StopIteration
hc_gen = HCGen(5, 15)
for hc in hc_gen:
print(hc, end=' ')
print()
hc_gen = HCGen(3, 7, 2)
for hc in hc_gen:
print(hc, end=' ')
Ответ:
C5H12 C6H14 C7H16 C8H18 C9H20 C10H22 C11H24 C12H26 C13H28 C14H30 C15H32
C3H8 C5H12 C7H16
