Изменил(а) на 'TEMA9/module.md'

main
TimoshenkoAA 2 месяцев назад
Родитель e0d55b671c
Сommit a91066d9ba

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

Загрузка…
Отмена
Сохранить