Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

149 строки
8.3 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# Индивидуальное задание по модулю 3
Криви Анастасия, А-02-23
Вариант 7
# Задание
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;
- функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j].
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1<T2 и, если это не выполняется - запрос повторяется;
- запрашивается у пользователя целое число М - число значений в списке СС; если М>(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.
# Решение
## Пункт первый - модуль М1
Создание первой функции: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;
```py
import random
def func1(T1, T2, M):
"""
Рассчет списка СС с M неповторяющимися целыми числами
в интервале между T1 и T2
"""
if T2 - T1 < M:
M = T2 - T1
CC = random.sample(range(T1, T2), M)
return CC
```
Создание второй функции: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j]
```py
def func2(CC, KK):
"""
Создание списка НН (с числом элементов, равным длине СС) с целыми значениями из КК,
близкими к соответствующим элементам в СС
"""
HH = []
for i in CC:
cl = min(KK, key= lambda x: abs(x - i))
HH.append(cl)
return HH
```
## Пункт второй - модуль М2
Запрос у пользователя целочисленных границ диапазона значений Т1 и Т2; проверка условия T1<T2 и, если это не выполняется - повтор запроса.
```py
def main():
while True:
try:
T1 = int(input("Введите первую границу: "))
T2 = int(input("Введите вторую границу: "))
if T1 < T2:
break
else:
print("Ошибка. Первая граница должна быть меньше второй границы.")
except ValueError:
print("Ошибка: введите целое число.")
```
Запрос у пользователя целого числа число значений в списке СС
```py
while True:
try:
M = int(input("Введите количество значений в списке СС: "))
break
except ValueError:
print("Ошибка: введите целое число.")
```
Проверка условия если М>(T2-T1), то принимается М=Т2-Т1, иначе значение М не изменяется
```py
if M > (T2 - T1):
M = T2 - T1
```
С помощью функции 1, созданной в пункте первом, создается и отображается список СС. Создание списка КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2. С помощью функции 2, созданной в пункте первом, рассчитывается список НН, а результат отображается на экране.
```py
CC = M1.func1(T1, T2, M)
print("Список СС:", CC)
KK = [random.randint(T1, T2) for _ in range(500)]
HH = M1.func2(CC, KK)
print("Список НН:", HH)
return KK, CC, HH
```
и завершение выполнение второго пункта, а именно создание модуля М2.
## Пункт третий
Создание модуля М0 - главной программы, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin.
```py
import M2
import pickle
CC, KK, HH = M2.main()
data_M2 = {'CC': CC,'KK': KK,'HH': HH}
filename = "Res1212.bin"
with open(filename, 'wb') as file:
pickle.dump(data_M2, file)
```
## Тестирование
Вывод с тестовыми значениями 1 (Т1=34, Т2=78, М= 10)
```py
Введите первую границу: 34
Введите вторую границу: 78
Введите количество значений в списке СС: 10
Список СС: [73, 54, 66, 42, 46, 48, 58, 72, 52, 75]
Список НН: [73, 54, 66, 42, 46, 48, 58, 72, 52, 75]
```
Фрагмент файла с бит(Res1212.bin)
```py
Ђ ](K.K&K4KMK6K?KEK3KGK0e](K9KNK8K2KDK;KKK3KKKNK;K+K6KJK%K/KGKHK*K=KAKBKIK"K:K(K4KLK$K(KMK0K6K#KKKHK5K?K0K+K7K&K/KEK3K1KDK?K;KCK,K?K3K/K3K<KLKAK&K8KDK-K;KEKFKGK6K"K9K?K:K5KLK'KDK"KGKEK<K.........
```
Вывод с тестовыми значениями 2 (Т1=25, Т2=30, М=8.)
```py
Введите первую границу: 25
Введите вторую границу: 30
Введите количество значений в списке СС: 8
Список СС: [27, 28, 29, 26, 25]
Список НН: [27, 28, 29, 26, 25]
```
Фрагмент файла с бит(Res1212.bin) при этих значениях.
```py
Ђ  ](KKKKKe](KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.........
```