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

6.0 KiB

# Тест по модулю 3, тема 9 (вариант 7)

Бережков Дмитрий А-01-23

## Задание:

M3_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.

## Решение:


import random

def func1(T1, T2, M):

&nbsp;   """

&nbsp;   Рассчет списка СС с M неповторяющимися целыми числами

&nbsp;   в интервале между T1 и T2

&nbsp;   """

&nbsp;   if T2 - T1 < M:

&nbsp;       M = T2 - T1

&nbsp;   CC = random.sample(range(T1, T2), M)

&nbsp;   return CC



def func2(CC, KK):

&nbsp;   """

&nbsp;   Создание списка НН (с числом элементов, равным длине СС) с целыми значениями из КК, 

&nbsp;   близкими к соответствующим элементам в СС

&nbsp;   """

&nbsp;   HH = \[]

&nbsp;   for i in CC:

&nbsp;       cl = min(KK, key= lambda x: abs(x - i))

&nbsp;       HH.append(cl)

&nbsp;   return HH


import M1

import random

def main():

&nbsp;   while True:

&nbsp;       try:

&nbsp;           T1 = int(input("Введите первую границу: "))

&nbsp;           T2 = int(input("Введите вторую границу: "))

&nbsp;           if T1 < T2:

&nbsp;               break

&nbsp;           else:

&nbsp;               print("Ошибка. Первая граница должна быть меньше второй границы.")

&nbsp;       except ValueError:

&nbsp;           print("Ошибка: введите целое число.")

&nbsp;   while True:

&nbsp;       try:

&nbsp;           M = int(input("Введите количество значений в списке СС: "))

&nbsp;           break

&nbsp;       except ValueError:

&nbsp;           print("Ошибка: введите целое число.")

&nbsp;   if M > (T2 - T1):

&nbsp;       M = T2 - T1

&nbsp;   CC = M1.func1(T1, T2, M)

&nbsp;   print("Список СС:", CC)

&nbsp;   KK = \[random.randint(T1, T2) for \_ in range(500)]

&nbsp;   HH = M1.func2(CC, KK)

&nbsp;   print("Список НН:", HH)

&nbsp;   return KK, CC, HH


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:

&nbsp;   pickle.dump(data\_M2, file)


Ђ      }(ЊCC](KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK](KKKKKHH](KKKKKeu.