# Индивидуальное контрольное задание по теме 9 Зеленкина Катерина, А-02-23 Вариант 6 ## Задание 1) Создайте модуль М1, содержащий две функции: - функция 1: аргумент - словарь с исходными данными (ключи - страны, значения - списки с 2 значениями: население, объем некоторого ресурса); функция должна создать два списка: список стран и список с элементами - для каждой страны значение ресурса на душу населения, а также значение отношения суммарных ресурсов к суммарному населению; - функция 2: аргумент - словарь, такой же, как в функции1; функция должна построить столбиковую диаграмму, демонстрирующую распределение ресурса по странам. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считывается объект-словарь с исходными данными; - вызывается функция 1 и отображаются результаты; - вызывается функция 2. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и после завершения ее работы записывает полученные результаты в текстовый файл Res3030.txt. 4) Проверьте программу с данными о запасах угля в разных странах: США 302 23.2 Россия 146 15.1 Австралия 28 14 Китай 1443 13.3 Индия 1415 10.3 Германия 83 3.3 ## Решение Содержимое M1 ```py import pylab def calc(d): pop = 0 res = 0 cnt = [] per = [] for c, v in d.items(): pop += v[0] res += v[1] cnt.append(c) per.append(v[1]/v[0] if v[0]>0 else 0) return cnt, per, res/pop if pop>0 else 0 def plot(d): pylab.bar(d.keys(), [v[1] for v in d.values()]) pylab.title('Ресурс по странам') pylab.xlabel('Страны') pylab.ylabel('Ресурс') pylab.show() ``` Содержимое M2: ```py import os import M1 def main(): fname = input("Файл (data.txt): ") if not os.path.isfile(fname): print("Файл не найден") return # Чтение данных data = {} with open(fname, 'r', encoding='utf-8') as f: for line in f: c, p, r = line.strip().split() data[c] = [float(p), float(r)] print("Данные:", data) # Расчёт c, p, o = M1.calc(data) print("\nРесурс на душу:") for country, val in zip(c, p): print(f"{country}: {val:.3f}") print(f"\nОбщее: {o:.3f}") # График M1.plot(data) return c, p, o ``` Содержимое M0: ```py import M2 res = M2.main() if res: c, p, o = res with open("Res3030.txt", "w", encoding="utf-8") as f: f.write("Результаты:\n") for country, value in zip(c, p): f.write(f"{country}: {value}\n") f.write(f"\nОбщее: {o}") ``` Создали файл data.txt с данными: ```py США 302 23.2 Россия 146 15.1 Австралия 28 14 Китай 1443 13.3 Индия 1415 10.3 Германия 83 3.3 ``` Вывод: ```py Файл (data.txt): data.txt Данные: {'США': [302.0, 23.2], 'Россия': [146.0, 15.1], 'Австралия': [28.0, 14.0], 'Китай': [1443.0, 13.3], 'Индия': [1415.0, 10.3], 'Германия': [83.0, 3.3]} Ресурс на душу: США: 0.077 Россия: 0.103 Австралия: 0.500 Китай: 0.009 Индия: 0.007 Германия: 0.040 Общее: 0.023 ``` График: ![Скриншот графика1](image1.png)