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

5.3 KiB

Индивидуальное контрольное задание по теме 9

Коломейцев Дмитрий, А-02-23

Задание

Вариант M3_5

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

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

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

  • считывание значений из каждой строки файла и формирование из них списка ММ;

  • вызов функции 1 с ММ и отображение результатов;

  • вызов функции 2 с передачей ей списка СС1 из функции 1 для записи в файл RES2.txt по 3 элемента в строке.

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

  2. Подготовьте 2 файла: один с 50 целочисленными случайными значениями из диапазона от 20 до 27, второй - с некоторым набором повторяющихся символьных значений, например, фамилий, и проверьте с ними разработанную программу.

Решение

Содержание M1:

# M1.py

def func1(CC):
    CC1 = []
    CC2 = []

    i = 0
    while i < len(CC):
        value = CC[i]
        j = 0
        exists = 0
        while j < len(CC1):
            if CC1[j] == value:
                exists = 1
                break
            j = j + 1
        if exists == 0:
            CC1.append(value)
        i = i + 1

    i = 0
    while i < len(CC1):
        value = CC1[i]
        count = 0
        j = 0
        while j < len(CC):
            if CC[j] == value:
                count = count + 1
            j = j + 1
        CC2.append(count)
        i = i + 1

    return CC1, CC2


def func2(filename, CC, n):
    with open(filename, "w", encoding="utf-8") as f:
        i = 0
        in_line = 0
        while i < len(CC):
            if in_line > 0:
                f.write(" ")
            f.write(str(CC[i]))
            in_line = in_line + 1

            if in_line == n:
                f.write("\n")
                in_line = 0

            i = i + 1

        if in_line != 0:
            f.write("\n")

Содержание M2:

# M2.py

import M1

def to_value(text):
    s = text.strip()
    if s.isdigit():
        return int(s)
    return s

def run():
    filename = input()
    MM = []
    with open(filename, "r", encoding="utf-8") as f:
        for line in f:
            parts = line.split()
            i = 0
            while i < len(parts):
                MM.append(to_value(parts[i]))
                i = i + 1

    CC1, CC2 = M1.func1(MM)
    print(CC1)
    print(CC2)
    M1.func2("RES2.txt", CC1, 3)
    return CC2

Содержание главного модуля M0:

# M0.py
import pickle
import matplotlib.pyplot as plt
import M2

def write_bin(filename,data):
    with open(filename,"wb") as f:
        pickle.dump(data,f)

def main():
    CC2=M2.run()
    x=[]
    i=0
    while i<len(CC2):
        x.append(i)
        i=i+1
    plt.plot(x,CC2)
    plt.grid(True)
    plt.show()
    write_bin("RES2a.bin",CC2)

main()

1 запуск:

import M0
NUM50.txt
# Числа
[21, 25, 23, 27, 22, 24, 26, 20]
# Количество повторений
[7, 7, 6, 6, 6, 6, 6, 6]

alt text

2 запуск:

import M0
NAMES.txt
# Имена
['Иванов', 'Петров', 'Сидоров', 'Смирнов', 'Кузнецов', 'Орлов']
# Количество повторений
[6, 5, 4, 4, 3, 3]

alt text

Содержимое RES2.txt после отработки программы:

Иванов Петров Сидоров
Смирнов Кузнецов Орлов

RES2a.bin создался успешно, данные занесены в бинарном виде.