# Тест по модулю 3. Вариант 7 Степанов Артём, А-02-23 ## Задание 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. ## Решение ```py >>> # Содержимое модуля M1.py >>> def createNumberList(T1, T2, M): import random CC = random.sample(range(T1, T2, 1), M) return CC def createListOfClosestNumbers(CC, KK): HH = [] for i in range(len(CC)): delta = abs(CC[i] - KK[0]) num = 0 for j in range(1, len(KK)): if (abs(CC[i] - KK[j]) < delta): delta = abs(CC[i] - KK[j]) num = j HH.append(KK[num]) return HH >>> >>> # Содержимое модуля M2.py >>> import M1, random [T1, T2] = [0, 0] while True: [T1, T2] = input("Введите значения T1, T2: ").split(",") [T1, T2] = [int(T1), int(T2)] if (T1 < T2): break print("Значение T1 должно быть меньше значения T2") M = int(input("Введите значение M: ")) if M > T2 - T1: M = T2 - T1 CC = M1.createNumberList(T1, T2, M) KK = [random.randint(T1, T2 - 1) for x in range(500)] HH = M1.createListOfClosestNumbers(CC, KK) print("Список HH:", HH) >>> >>> # Содержимое модуля M0.py >>> import M2, pickle fp = open("Res1212.bin", "wb") pickle.dump(M2.KK, fp) pickle.dump(M2.CC, fp) pickle.dump(M2.HH, fp) print("Полученные списки записаны в файл 'Res1212.bin'") fp.close() >>> >>> Пример работы программы на первом наборе параметров >>> >>> import os, pickle >>> os.chdir("C:\\Users\\u206-02\\Desktop\\StepanovAV\\python-labs\\TEMA9\\test") >>> os.getcwd() 'C:\\Users\\u206-02\\Desktop\\StepanovAV\\python-labs\\TEMA9\\test' >>> import M0 Введите значения T1, T2: 34, 78 Введите значение M: 10 Список HH: [61, 77, 46, 57, 68, 38, 60, 34, 72, 40] Полученные списки записаны в файл 'Res1212.bin' >>> fp = open("Res1212.bin", "rb") >>> K = pickle.load(fp) >>> C = pickle.load(fp) >>> H = pickle.load(fp) >>> K [76, 60, 52, ..., 35, 65, 49] >>> C [61, 77, 46, 57, 68, 38, 60, 34, 72, 40] >>> H [61, 77, 46, 57, 68, 38, 60, 34, 72, 40] >>> >>> Пример работы программы на втором наборе параметров >>> >>> import sys >>> sys.modules.pop("M0") >>> sys.modules.pop("M1") >>> sys.modules.pop("M2") >>> import M0 Введите значения T1, T2: 25, 30 Введите значение M: 8 Список HH: [25, 29, 26, 27, 28] Полученные списки записаны в файл 'Res1212.bin' >>> fp = open("Res1212.bin", "rb") >>> K = pickle.load(fp) >>> C = pickle.load(fp) >>> H = pickle.load(fp) >>> K [29, 29, 28, ..., 25, 27, 26] >>> C [25, 29, 26, 27, 28] >>> H [25, 29, 26, 27, 28] ```