Top.Mail.Ru
Ответы

Помогите решить задание по Питону. Тема: Библиотеки Matplotlib и NumPy

Менеджер крупной столичной фирмы Алексей готовит отчет о прибыльности проекта. Для отчета о прибыли фирмы Алексей проанализировал много данных и построил графики дневной прибыли.
По плану, который был составлен до старта проекта, прибыль должна была увеличиваться линейно каждый день. Если за первый день работы проекта прибыль была 5 у.е., за последний — 15 у.е., между ними прошло 10 дней, то прибыль за второй день составит 6 у.е., за третий — 7 у.е. и так далее.
На деле оказалось, что участники проекта очень не любят понедельники, и их продуктивность по понедельникам (то есть каждый 7-ой день) снижается в 3 раза по сравнению с ожидаемой, а в пятницу — наоборот: участники проекта чувствуют душевный подъем и работают в 2 раза активнее. Из-за этого прибыль по этим дням изменяется пропорционально продуктивности.
Пример: ожидаемая прибыль проекта (план)
-пн: 6 у.е.
-вт: 8 у.е.
-ср: 10 у.е.
-чт: 12 у.е.
-пт: 14 у.е.
-сб: 16 у.е.
-вс: 18 у.е.
-пн: 20 у.е.
-вт: ... и т.д.
Фактическая прибыль проекта (с поправкой на продуктивность):
-пн: 2 у.е.
-вт: 8 у.е.
-ср: 10 у.е.
-чт: 12 у.е.
-пт: 28 у.е.
-сб: 16 у.е.
-вс: 18 у.е.
-пн: 6.666 у.е.
-вт: ... и т.д.
Вам дана информация об ожидаемой по плану прибыли в первый день запуска проекта, об ожидаемой по плану прибыли в последний день запуска проекта и количестве дней работы проекта. Считаем, что понедельник — всегда первый день запуска проекта. При помощи np.linspace и присваиваний в срез, найдите фактическую прибыль проекта с поправкой на продуктивность участников за каждый день работы проекта.
Формат ввода
В файле input.txt Вам даны три числа: прибыль (по плану) проекта в первый день (в понедельник), прибыль (по плану) проекта в последний день и количество дней.
Формат вывода
Выведите в файл output.txt массив, содержащий данные по ежедневной фактической прибыли. Прибыль за каждый день представляет собой вещественное число c точностью 2 знака после запятой, каждое число записывается в отдельной строке.

Пример
Ввод
10
50
5

Вывод
3.33
20.00
30.00
40.00
100.00

Примечания
Обратите внимание, что в выходном файле нужно сохранять числа с точностью 2 знака после точки.
Во входных данных может быть больше одного понедельника и пятницы.
Не забывайте делать import numpy!
Значения прибыли проекта во входных данных могут быть нецелыми числами (вещественными).
Пятница - не всегда последний день. И она может быть не одна.
Проверяйте, что в выходных данных нет лишних пробелов.
Обратите внимание, что у функции numpy.linspace(start, end, len) первые 2 аргумента (start и end) - начало и конец списка - могут быть нецелыми. А вот третий аргумент - len
длина списка, должен быть целым числом.
Метод round() округляет так, что не оставляет нулей в конце. Например, round(5.101, 2) выдаст 5.1, хотя нужно выводить 5.10. Чтобы побороть эту проблему, можно отсекать лишние разряды в самом методе print() с помощью f-string: f'{x:.2f}'. Подробнее: см. рекомендации к вводу-выводу.

По дате
По рейтингу
Аватар пользователя
Мастер

И не благодари)

12345678910111213141516171819202122232425
 import numpy as np 
 
# input.txt должен содержать данные в нужном формате 
input_file_path = 'input.txt' 
output_file_path = 'output.txt' 
 
# Чтение данных из файла 
with open(input_file_path, 'r') as file: 
    start_profit, end_profit, num_days = [float(num) for num in file.read().split()] 
 
# Генерация ожидаемой прибыли 
planned_profits = np.linspace(start_profit, end_profit, int(num_days)) 
 
# Корректировка фактической прибыли 
actual_profits = planned_profits.copy() 
actual_profits[::7] /= 3  # Понедельники 
actual_profits[4::7] *= 2  # Пятницы 
 
# Запись фактической прибыли в файл с сохранением двух знаков после запятой 
with open(output_file_path, 'w') as file: 
    for profit in actual_profits: 
        file.write(f'{profit:.2f}\n') 
 
print("Операция выполнена успешно.")