# Тест по модулю 3 Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А. ## Задание(Вариант 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. ## Решение m1.py: ``` import random def make_CC(T1, T2, M): "Создаю список из M случайных чисел от T1 до T2" if M > (T2 - T1 + 1): M = T2 - T1 + 1 return random.sample(range(T1, T2 + 1), M) def make_HH(CC, KK): "Для каждого числа в CC нахожу ближайшее число из KK" HH = [] for c in CC: # Ищем самое близкое число closest = min(KK, key=lambda k: abs(k - c)) HH.append(closest) return HH ``` m2.py: ``` import random from m1 import make_CC, make_HH def get_numbers(): "Получаю числа от пользователя" # Получаю T1 и T2 while True: T1 = int(input("Введите T1: ")) T2 = int(input("Введите T2: ")) if T1 < T2: break print("T1 должно быть меньше T2!") # Получаю M M = int(input("Введите M: ")) if M > (T2 - T1): M = T2 - T1 print(f"M уменьшено до {M}") # Создаю списки CC = make_CC(T1, T2, M) KK = [random.randint(T1, T2) for _ in range(500)] HH = make_HH(CC, KK) print("CC:", CC) print("HH:", HH) return CC, KK, HH ``` m0.py: ``` import pickle from m2 import get_numbers # Тест 1 print(" Тест 1 ") CC1, KK1, HH1 = get_numbers() # Тест 2 print("\n Тест 2 ") CC2, KK2, HH2 = get_numbers() # Записываю в файл with open("Res1212.bin", "wb") as f: pickle.dump({ 'test1': {'CC': CC1, 'KK': KK1, 'HH': HH1}, 'test2': {'CC': CC2, 'KK': KK2, 'HH': HH2} }, f) print("Данные сохранены в Res1212.bin") ``` Данные сохранены в Res1212.bin Вывод в терминал: ``` Тест 1 Введите T1: 34 Введите T2: 78 Введите M: 10 CC: [56, 58, 73, 43, 74, 61, 64, 52, 40, 50] HH: [56, 58, 73, 43, 74, 61, 64, 52, 40, 50] Тест 2 Введите T1: 25 Введите T2: 30 Введите M: 8 M уменьшено до 5 CC: [28, 26, 25, 29, 27] HH: [28, 26, 25, 29, 27] Данные сохранены в Res1212.bin ```