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

4.0 KiB

Индивидуальное контрольное задание по ТЕМЕ №8

Степанищев Виктор, А-03-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.

Решение

Файл M2.py

from typing import Tuple
import random
from M1 import func1, func2


def _input_int(prompt: str) -> int:
    s = input(prompt)
    return int(s)


def _input_range_t1_t2() -> Tuple[int, int]:
    while True:
        t1 = _input_int("T1: ")
        t2 = _input_int("T2: ")
        if t1 < t2:
            return t1, t2


def main():
    t1, t2 = _input_range_t1_t2()

    m = _input_int("m: ")
    max_m = t2 - t1
    if m > max_m:
        m = max_m

    CC = func1(t1, t2, m)
    KK = [random.randint(t1, t2) for i in range(500)]

    HH = func2(CC, KK)
    print("HH:", HH)
    return CC, KK, HH

Файл M1.py

from typing import List, Union, Tuple
from random import sample


def func1(T1: int, T2: int, M: int) -> List[int]:
    CC = sample(range(T1, T2+1), M)
    return CC

from typing import List, Tuple, Union

def func2(CC: List[int], KK: Union[Tuple[int, ...], List[int]]) -> List[int]:
    HH = []
    KK = list(KK)

    for c in CC:
        nearest = min(KK, key=lambda x: abs(x - c))
        HH.append(nearest)

    return HH

Файл M0.py

import pickle
import M2


def main():
    CC, KK, HH = M2.main()

    data = {
        "CC": CC,
        "KK": KK,
        "HH": HH,
    }

    with open("Res1212.bin", "wb") as f:
        pickle.dump(data, f)

main()

Вывод

>>> T1: 34
>>> T2: 78
>>> m: 10
HH: [48, 75, 60, 69, 70, 45, 63, 59, 66, 38]