форкнуто от main/python-labs
Родитель
9c0613275b
Сommit
8d3534f462
@ -1,22 +1,19 @@
|
|||||||
# M0.py
|
# M0.pyimport sys
|
||||||
import pickle
|
import os
|
||||||
import pylab
|
|
||||||
import M2
|
import M2
|
||||||
|
|
||||||
# Получаем данные (они уже прочитаны в M2)
|
output_lines = []
|
||||||
data = M2.original_data
|
output_lines.append("Результаты анализа данных о запасах угля")
|
||||||
|
|
||||||
# График
|
for country, value in zip(M2.result_countries, M2.result_per_capita):
|
||||||
pylab.plot(data, marker='o')
|
line = f"{country}: {value:.6f} трлн т/млн чел"
|
||||||
pylab.title("Исходные данные")
|
output_lines.append(line)
|
||||||
pylab.xlabel("Номер")
|
|
||||||
pylab.ylabel("Значение")
|
output_lines.append(f"\nОбщее отношение ресурсов к населению: {M2.result_overall:.6f}")
|
||||||
pylab.grid(True)
|
|
||||||
pylab.show()
|
|
||||||
|
|
||||||
# Запись в бинарный файл
|
f = open("Res3030.txt", "w", encoding="utf-8")
|
||||||
f = open("RES2a.bin", "wb")
|
for line in output_lines:
|
||||||
pickle.dump(data, f)
|
f.write(line + "\n")
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
print("Исходные данные записаны в RES2a.bin")
|
print("\nРезультаты записаны в файл Res3030.txt")
|
||||||
|
|||||||
@ -1,53 +1,42 @@
|
|||||||
# M1.py
|
import pylab
|
||||||
import os
|
def func1(data_dict):
|
||||||
import math
|
"""
|
||||||
|
Аргумент: словарь {страна: [население, ресурс]}
|
||||||
def func1(filename, KK):
|
Возвращает:
|
||||||
numbers = []
|
- список стран,
|
||||||
f = open(filename, 'r')
|
- список ресурс/душу,
|
||||||
for line in f:
|
- общее отношение суммарных ресурсов к суммарному населению
|
||||||
parts = line.split()
|
"""
|
||||||
for p in parts:
|
countries = []
|
||||||
numbers.append(float(p))
|
per_capita = []
|
||||||
f.close()
|
total_pop = 0.0
|
||||||
|
total_res = 0.0
|
||||||
base, ext = os.path.splitext(filename)
|
|
||||||
f1 = open(base + '1' + ext, 'w')
|
for country, values in data_dict.items():
|
||||||
f2 = open(base + '2' + ext, 'w')
|
pop = values[0]
|
||||||
|
res = values[1]
|
||||||
for x in numbers:
|
countries.append(country)
|
||||||
if x > KK:
|
per_capita.append(res / pop if pop != 0 else 0)
|
||||||
f1.write(str(x) + '\n')
|
total_pop += pop
|
||||||
else:
|
total_res += res
|
||||||
f2.write(str(x) + '\n')
|
|
||||||
|
overall_ratio = total_res / total_pop if total_pop != 0 else 0
|
||||||
f1.close()
|
return countries, per_capita, overall_ratio
|
||||||
f2.close()
|
|
||||||
return numbers
|
|
||||||
|
def func2(data_dict):
|
||||||
|
"""
|
||||||
def func2(filename):
|
столбиковая диаграмма распределения ресурсов по странам.
|
||||||
numbers = []
|
"""
|
||||||
f = open(filename, 'r')
|
countries = list(data_dict.keys())
|
||||||
for line in f:
|
resources = []
|
||||||
parts = line.split()
|
for country in countries:
|
||||||
for p in parts:
|
resources.append(data_dict[country][1])
|
||||||
numbers.append(float(p))
|
|
||||||
f.close()
|
pylab.figure(figsize=(10, 5))
|
||||||
|
pylab.bar(countries, resources, color='blue')
|
||||||
if len(numbers) == 0:
|
pylab.title("Распределение угля по странам (трлн т)")
|
||||||
return 0, 0, 0, 0, 0 # пустой файл
|
pylab.xlabel("Страны")
|
||||||
|
pylab.ylabel("Запасы угля")
|
||||||
n = len(numbers)
|
pylab.tight_layout()
|
||||||
mean = sum(numbers) / n
|
pylab.show()
|
||||||
min_val = min(numbers)
|
|
||||||
max_val = max(numbers)
|
|
||||||
std_dev = math.sqrt(sum((x - mean) ** 2 for x in numbers) / n)
|
|
||||||
|
|
||||||
sorted_nums = sorted(numbers)
|
|
||||||
if n % 2 == 1:
|
|
||||||
median = sorted_nums[n // 2]
|
|
||||||
else:
|
|
||||||
median = (sorted_nums[n // 2 - 1] + sorted_nums[n // 2]) / 2
|
|
||||||
|
|
||||||
return mean, median, min_val, max_val, std_dev
|
|
||||||
|
|||||||
@ -1,38 +1,25 @@
|
|||||||
# M2.py
|
# M2.py
|
||||||
import os
|
import os
|
||||||
|
import pickle
|
||||||
from M1 import func1, func2
|
from M1 import func1, func2
|
||||||
|
|
||||||
# Запрос имени файла с проверкой существования
|
filename = input("Введите имя файла с данными: ").strip()
|
||||||
filename = input("Введите имя файла с исходными данными: ")
|
|
||||||
while not os.path.isfile(filename):
|
|
||||||
print("Файл не найден.")
|
|
||||||
filename = input("Введите имя файла с исходными данными: ")
|
|
||||||
|
|
||||||
# Запрос порога
|
f = open(filename, "rb")
|
||||||
KK = float(input("Введите пороговое значение KK: "))
|
data = pickle.load(f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
# Вызов func1
|
countries, per_capita, overall_ratio = func1(data)
|
||||||
data = func1(filename, KK)
|
|
||||||
|
|
||||||
# Имена новых файлов
|
print("\nСтраны и ресурс на душу населения:")
|
||||||
base, ext = os.path.splitext(filename)
|
for i in range(len(countries)):
|
||||||
file1 = base + '1' + ext
|
print(f"{countries[i]}: {per_capita[i]:.6f} трлн т/млн чел")
|
||||||
file2 = base + '2' + ext
|
|
||||||
|
|
||||||
# Три вызова func2
|
print(f"\nОбщее отношение суммарных ресурсов к суммарному населению: {overall_ratio:.6f}")
|
||||||
files = [filename, file1, file2]
|
|
||||||
labels = ["Исходный", "Больше KK", "Не больше KK"]
|
|
||||||
|
|
||||||
print("\nРезультаты статистики:")
|
func2(data)
|
||||||
print("-" * 50)
|
|
||||||
for i in range(3):
|
|
||||||
mean, median, minv, maxv, std = func2(files[i])
|
|
||||||
print(f"\n{labels[i]} файл:")
|
|
||||||
print(f" Среднее: {mean:.4f}")
|
|
||||||
print(f" Медиана: {median:.4f}")
|
|
||||||
print(f" Минимум: {minv:.4f}")
|
|
||||||
print(f" Максимум: {maxv:.4f}")
|
|
||||||
print(f" Ст. откл.: {std:.4f}")
|
|
||||||
|
|
||||||
# Возвращаем исходные данные для M0
|
result_countries = countries
|
||||||
original_data = data
|
result_per_capita = per_capita
|
||||||
|
result_overall = overall_ratio
|
||||||
|
result_data = data
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
Результаты анализа данных о запасах угля
|
||||||
|
США: 0.076821 трлн т/млн чел
|
||||||
|
Россия: 0.103425 трлн т/млн чел
|
||||||
|
Австралия: 0.500000 трлн т/млн чел
|
||||||
|
Китай: 0.009217 трлн т/млн чел
|
||||||
|
Индия: 0.007279 трлн т/млн чел
|
||||||
|
Германия: 0.039759 трлн т/млн чел
|
||||||
|
|
||||||
|
Общее отношение ресурсов к населению: 0.023178
|
||||||
|
После Ширина: | Высота: | Размер: 29 KiB |
@ -0,0 +1,15 @@
|
|||||||
|
import pickle
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"США": [302, 23.2],
|
||||||
|
"Россия": [146, 15.1],
|
||||||
|
"Австралия": [28, 14.0],
|
||||||
|
"Китай": [1443, 13.3],
|
||||||
|
"Индия": [1415, 10.3],
|
||||||
|
"Германия": [83, 3.3]
|
||||||
|
}
|
||||||
|
|
||||||
|
f = open("ugol.dat", "wb")
|
||||||
|
pickle.dump(data, f)
|
||||||
|
f.close()
|
||||||
|
print("Бинарный файл ugol.dat создан.")
|
||||||
@ -0,0 +1,165 @@
|
|||||||
|
## Индивидуальное контрольное задание по теме 9 вариант 6
|
||||||
|
|
||||||
|
Анисенков Павел А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
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
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
Сначала создадим бинарный файл с данными:
|
||||||
|
```py
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"США": [302, 23.2],
|
||||||
|
"Россия": [146, 15.1],
|
||||||
|
"Австралия": [28, 14.0],
|
||||||
|
"Китай": [1443, 13.3],
|
||||||
|
"Индия": [1415, 10.3],
|
||||||
|
"Германия": [83, 3.3]
|
||||||
|
}
|
||||||
|
|
||||||
|
f = open("ugol.dat", "wb")
|
||||||
|
pickle.dump(data, f)
|
||||||
|
f.close()
|
||||||
|
print("Бинарный файл ugol.dat создан.")
|
||||||
|
|
||||||
|
|
||||||
|
M1
|
||||||
|
import pylab
|
||||||
|
def func1(data_dict):
|
||||||
|
"""
|
||||||
|
Аргумент: словарь {страна: [население, ресурс]}
|
||||||
|
Возвращает:
|
||||||
|
- список стран,
|
||||||
|
- список ресурс/душу,
|
||||||
|
- общее отношение суммарных ресурсов к суммарному населению
|
||||||
|
"""
|
||||||
|
countries = []
|
||||||
|
per_capita = []
|
||||||
|
total_pop = 0.0
|
||||||
|
total_res = 0.0
|
||||||
|
|
||||||
|
for country, values in data_dict.items():
|
||||||
|
pop = values[0]
|
||||||
|
res = values[1]
|
||||||
|
countries.append(country)
|
||||||
|
per_capita.append(res / pop if pop != 0 else 0)
|
||||||
|
total_pop += pop
|
||||||
|
total_res += res
|
||||||
|
|
||||||
|
overall_ratio = total_res / total_pop if total_pop != 0 else 0
|
||||||
|
return countries, per_capita, overall_ratio
|
||||||
|
|
||||||
|
|
||||||
|
def func2(data_dict):
|
||||||
|
"""
|
||||||
|
столбиковая диаграмма распределения ресурсов по странам.
|
||||||
|
"""
|
||||||
|
countries = list(data_dict.keys())
|
||||||
|
resources = []
|
||||||
|
for country in countries:
|
||||||
|
resources.append(data_dict[country][1])
|
||||||
|
|
||||||
|
pylab.figure(figsize=(10, 5))
|
||||||
|
pylab.bar(countries, resources, color='blue')
|
||||||
|
pylab.title("Распределение угля по странам (трлн т)")
|
||||||
|
pylab.xlabel("Страны")
|
||||||
|
pylab.ylabel("Запасы угля")
|
||||||
|
pylab.tight_layout()
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
|
||||||
|
M2
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
from M1 import func1, func2
|
||||||
|
|
||||||
|
filename = input("Введите имя файла с данными: ").strip()
|
||||||
|
|
||||||
|
f = open(filename, "rb")
|
||||||
|
data = pickle.load(f)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
countries, per_capita, overall_ratio = func1(data)
|
||||||
|
|
||||||
|
print("\nСтраны и ресурс на душу населения:")
|
||||||
|
for i in range(len(countries)):
|
||||||
|
print(f"{countries[i]}: {per_capita[i]:.6f} трлн т/млн чел")
|
||||||
|
|
||||||
|
print(f"\nОбщее отношение суммарных ресурсов к суммарному населению: {overall_ratio:.6f}")
|
||||||
|
|
||||||
|
func2(data)
|
||||||
|
|
||||||
|
result_countries = countries
|
||||||
|
result_per_capita = per_capita
|
||||||
|
result_overall = overall_ratio
|
||||||
|
result_data = data
|
||||||
|
|
||||||
|
M0
|
||||||
|
import os
|
||||||
|
import M2
|
||||||
|
|
||||||
|
output_lines = []
|
||||||
|
output_lines.append("Результаты анализа данных о запасах угля")
|
||||||
|
|
||||||
|
for country, value in zip(M2.result_countries, M2.result_per_capita):
|
||||||
|
line = f"{country}: {value:.6f} трлн т/млн чел"
|
||||||
|
output_lines.append(line)
|
||||||
|
|
||||||
|
output_lines.append(f"\nОбщее отношение ресурсов к населению: {M2.result_overall:.6f}")
|
||||||
|
|
||||||
|
f = open("Res3030.txt", "w", encoding="utf-8")
|
||||||
|
for line in output_lines:
|
||||||
|
f.write(line + "\n")
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
print("\nРезультаты записаны в файл Res3030.txt")
|
||||||
|
```
|
||||||
|
|
||||||
|
Отображение результата:
|
||||||
|
|
||||||
|
```py
|
||||||
|
Введите имя файла с данными: ugol.dat
|
||||||
|
|
||||||
|
Страны и ресурс на душу населения:
|
||||||
|
США: 0.076821 трлн т/млн чел
|
||||||
|
Россия: 0.103425 трлн т/млн чел
|
||||||
|
Австралия: 0.500000 трлн т/млн чел
|
||||||
|
Китай: 0.009217 трлн т/млн чел
|
||||||
|
Индия: 0.007279 трлн т/млн чел
|
||||||
|
Германия: 0.039759 трлн т/млн чел
|
||||||
|
|
||||||
|
Общее отношение суммарных ресурсов к суммарному населению: 0.023178
|
||||||
|
|
||||||
|
Результаты записаны в файл Res3030.txt
|
||||||
|
```
|
||||||
|

|
||||||
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче