diff --git a/TEMA9/module.md b/TEMA9/module.md index fa355b3..317513e 100644 --- a/TEMA9/module.md +++ b/TEMA9/module.md @@ -1,126 +1,126 @@ -# Тест по модулю 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 - -``` +# Тест по модулю 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" + max_possible = T2 - T1 + 1 + if M > max_possible: + M = max_possible + 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 + +```