diff --git a/TEMA9/test/M0.py b/TEMA9/test/M0.py new file mode 100644 index 0000000..e03c647 --- /dev/null +++ b/TEMA9/test/M0.py @@ -0,0 +1,8 @@ +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() diff --git a/TEMA9/test/M1.py b/TEMA9/test/M1.py new file mode 100644 index 0000000..10af6e4 --- /dev/null +++ b/TEMA9/test/M1.py @@ -0,0 +1,16 @@ +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 diff --git a/TEMA9/test/M2.py b/TEMA9/test/M2.py new file mode 100644 index 0000000..ac26e88 --- /dev/null +++ b/TEMA9/test/M2.py @@ -0,0 +1,17 @@ +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) diff --git a/TEMA9/test/Res1212.bin b/TEMA9/test/Res1212.bin new file mode 100644 index 0000000..da1f74a Binary files /dev/null and b/TEMA9/test/Res1212.bin differ diff --git a/TEMA9/test/test.md b/TEMA9/test/test.md new file mode 100644 index 0000000..7469b45 --- /dev/null +++ b/TEMA9/test/test.md @@ -0,0 +1,126 @@ +# Тест по модулю 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] +``` \ No newline at end of file