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

4.7 KiB

Тест по модулю 3

Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А.

Задание(Вариант 7)

  1. Создайте модуль М1, содержащий две функции:
  • функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2;

  • функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j].

  1. Создайте еще один модуль М2, в котором должны выполняться операции:
  • запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1<T2 и, если это не выполняется - запрос повторяется;

  • запрашивается у пользователя целое число М - число значений в списке СС; если М>(T2-T1), то принимается М=Т2-Т1;

  • с помощью функции 1 создается и отображается список СС;

  • создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2;

  • с помощью функции 2 рассчитывается список НН; результат отображается на экране.

  1. Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin.

  2. Проверьте программу при двух наборах исходных данных:

  • Т1=34, Т2=78, М= 10

  • Т1=25, Т2=30, М=8.

Решение

m1.py:

import random

def make_CC(T1, T2, M):
    "Создаю список из M случайных чисел от T1 до T2"
    max_possible = T2 - T1 + 1
    if M > max_possible:
        M = max_possible
    return random.sample(range(T1, T2 + 1), M)

def make_HH(CC, KK):
    "Для каждого числа в CC нахожу ближайшее число из KK"
    HH = []
    for c in CC:
        closest = min(KK, key=lambda k: abs(k - c))
        HH.append(closest)
    return HH

m2.py:

import random
from m1 import make_CC, make_HH

def get_numbers():
    "Получаю числа от пользователя"
    # Получаю T1 и T2
    while True:
        T1 = int(input("Введите T1: "))
        T2 = int(input("Введите T2: "))
        if T1 < T2:
            break
        print("T1 должно быть меньше T2")
    
    # Получаю M
    M = int(input("Введите M: "))
    if M > (T2 - T1):
        M = T2 - T1
        print(f"M уменьшено до {M}")
    
    # Создаю списки
    CC = make_CC(T1, T2, M)
    KK = [random.randint(T1, T2) for _ in range(500)]
    HH = make_HH(CC, KK)
    
    print("CC:", CC)
    print("HH:", HH)
    
    return CC, KK, HH

m0.py:

import pickle
from m2 import get_numbers

# Тест 1
print(" Тест 1 ")
CC1, KK1, HH1 = get_numbers()

# Тест 2  
print("\n Тест 2 ")
CC2, KK2, HH2 = get_numbers()

# Записываю в файл
with open("Res1212.bin", "wb") as f:
    pickle.dump({
        'test1': {'CC': CC1, 'KK': KK1, 'HH': HH1},
        'test2': {'CC': CC2, 'KK': KK2, 'HH': HH2}
    }, f)

print("Данные сохранены в Res1212.bin")

Данные сохранены в Res1212.bin

Вывод в терминал:

 Тест 1 
Введите T1: 34
Введите T2: 78
Введите M: 10
CC: [56, 58, 73, 43, 74, 61, 64, 52, 40, 50]
HH: [56, 58, 73, 43, 74, 61, 64, 52, 40, 50]

 Тест 2 
Введите T1: 25
Введите T2: 30
Введите M: 8
M уменьшено до 5
CC: [28, 26, 25, 29, 27]
HH: [28, 26, 25, 29, 27]
Данные сохранены в Res1212.bin