diff --git a/TEMA9/test/M0.py b/TEMA9/test/M0.py new file mode 100644 index 0000000..c0ec6a7 --- /dev/null +++ b/TEMA9/test/M0.py @@ -0,0 +1,10 @@ +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}") diff --git a/TEMA9/test/M1.py b/TEMA9/test/M1.py new file mode 100644 index 0000000..52ba160 --- /dev/null +++ b/TEMA9/test/M1.py @@ -0,0 +1,20 @@ +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() diff --git a/TEMA9/test/M2.py b/TEMA9/test/M2.py new file mode 100644 index 0000000..c6fdfc6 --- /dev/null +++ b/TEMA9/test/M2.py @@ -0,0 +1,30 @@ +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 diff --git a/TEMA9/test/Res3030.txt b/TEMA9/test/Res3030.txt new file mode 100644 index 0000000..5d3d72d --- /dev/null +++ b/TEMA9/test/Res3030.txt @@ -0,0 +1,9 @@ +Результаты: +США: 0.07682119205298013 +Россия: 0.10342465753424657 +Австралия: 0.5 +Китай: 0.009216909216909217 +Индия: 0.007279151943462898 +Германия: 0.03975903614457831 + +Общее: 0.023178226514486387 \ No newline at end of file diff --git a/TEMA9/test/data.txt b/TEMA9/test/data.txt new file mode 100644 index 0000000..b953287 --- /dev/null +++ b/TEMA9/test/data.txt @@ -0,0 +1,6 @@ +США 302 23.2 +Россия 146 15.1 +Австралия 28 14 +Китай 1443 13.3 +Индия 1415 10.3 +Германия 83 3.3 \ No newline at end of file diff --git a/TEMA9/test/image1.png b/TEMA9/test/image1.png new file mode 100644 index 0000000..65ceae0 Binary files /dev/null and b/TEMA9/test/image1.png differ diff --git a/TEMA9/test/test.md b/TEMA9/test/test.md new file mode 100644 index 0000000..e60465b --- /dev/null +++ b/TEMA9/test/test.md @@ -0,0 +1,132 @@ +# Индивидуальное контрольное задание по теме 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)