|
|
|
|
@ -0,0 +1,149 @@
|
|
|
|
|
# Индивидуальное задание по модулю 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.........
|
|
|
|
|
```
|