# Индивидуальное контрольное задание по ТЕМЕ №8 Степанищев Виктор, А-03-23 ## Задание ``` #7 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2; - функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j]. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1(T2-T1), то принимается М=Т2-Т1; - с помощью функции 1 создается и отображается список СС; - создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2; - с помощью функции 2 рассчитывается список НН; результат отображается на экране. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin. 4) Проверьте программу при двух наборах исходных данных: - Т1=34, Т2=78, М= 10 - Т1=25, Т2=30, М=8. ``` ## Решение ### Файл M2.py ```py from typing import Tuple import random from M1 import func1, func2 def _input_int(prompt: str) -> int: s = input(prompt) return int(s) def _input_range_t1_t2() -> Tuple[int, int]: while True: t1 = _input_int("T1: ") t2 = _input_int("T2: ") if t1 < t2: return t1, t2 def main(): t1, t2 = _input_range_t1_t2() m = _input_int("m: ") max_m = t2 - t1 if m > max_m: m = max_m CC = func1(t1, t2, m) KK = [random.randint(t1, t2) for i in range(500)] HH = func2(CC, KK) print("HH:", HH) return CC, KK, HH ``` ### Файл M1.py ```py from typing import List, Union, Tuple from random import sample def func1(T1: int, T2: int, M: int) -> List[int]: CC = sample(range(T1, T2+1), M) return CC from typing import List, Tuple, Union def func2(CC: List[int], KK: Union[Tuple[int, ...], List[int]]) -> List[int]: HH = [] KK = list(KK) for c in CC: nearest = min(KK, key=lambda x: abs(x - c)) HH.append(nearest) return HH ``` ### Файл M0.py ```py import pickle import M2 def main(): CC, KK, HH = M2.main() data = { "CC": CC, "KK": KK, "HH": HH, } with open("Res1212.bin", "wb") as f: pickle.dump(data, f) if __name__ == "__main__": main() ``` ### Вывод ```py >>> T1: 34 >>> T2: 78 >>> m: 10 HH: [48, 75, 60, 69, 70, 45, 63, 59, 66, 38] ```