# Индивидуальное контрольное задание по теме 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)
