форкнуто от main/python-labs
Родитель
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
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
Загрузка…
Ссылка в новой задаче