Advertisement
Korotkodul

A. Ну что там с деньгами?_2

Feb 23rd, 2025
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.51 KB | None | 0 0
  1. import numpy as np
  2. import calendar
  3. from typing import Optional
  4. from enum import Enum
  5. from numbers import Real
  6.  
  7. class Strategies(Enum):
  8.     BY_GOOD = "BY_GOOD"   # придумайте значение enum'а
  9.     BY_MONTH = "BY_MONTH"  # придумайте значение enum'а
  10.  
  11. months_list = [calendar.month_name[i] for i in range(1, 13)]
  12.  
  13. class InconsistentDataError(Exception):
  14.     pass
  15.  
  16. def get_most_profitable_month_name(
  17.     amounts_of_sold_subscriptions: np.ndarray,
  18.     subscriptions_prices: np.ndarray,
  19. ) -> str:
  20.     if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
  21.         raise InconsistentDataError
  22.     income = amounts_of_sold_subscriptions * subscriptions_prices
  23.     sold_per_month = np.sum(income, axis = 1)
  24.     max_id = np.argmax(sold_per_month)
  25.     return months_list[max_id]
  26.  
  27.  
  28. def get_mean_profit(
  29.         amounts_of_sold_subscriptions: np.ndarray,
  30.         subscriptions_prices: np.ndarray,
  31.         strategy: Optional[Strategies] = None,
  32. ):
  33.     if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
  34.         raise InconsistentDataError
  35.     income = amounts_of_sold_subscriptions * subscriptions_prices
  36.     income_per_month = np.sum(income, axis=1)
  37.     income_per_year = np.sum(income_per_month)
  38.     amounts_of_sold_subscriptions_per_month = np.sum(amounts_of_sold_subscriptions, axis = 1)
  39.     amounts_of_sold_subscriptions_per_year = np.sum(amounts_of_sold_subscriptions_per_month)
  40.     amounts_of_sold_subscriptions_per_service = np.sum(amounts_of_sold_subscriptions, axis = 0)
  41.     income_per_servise_per_year = np.sum(income, axis = 0)
  42.     res = None
  43.     if strategy == None:
  44.         res = income_per_year / amounts_of_sold_subscriptions_per_year
  45.     elif strategy == Strategies.BY_GOOD:
  46.         res = income_per_servise_per_year / amounts_of_sold_subscriptions_per_service
  47.     elif strategy == Strategies.BY_MONTH:
  48.         res = income_per_month / amounts_of_sold_subscriptions_per_month
  49.     return res
  50.  
  51.  
  52. def sort_month_names_by_profits(
  53.     amounts_of_sold_subscriptions: np.ndarray,
  54.     subscriptions_prices: np.ndarray,
  55.     ascending: bool = True,
  56. ) -> list[str]:
  57.     if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
  58.         raise InconsistentDataError
  59.     income = amounts_of_sold_subscriptions * subscriptions_prices
  60.     income_per_month = np.sum(income, axis=1)
  61.     indices = np.argsort(income_per_month)
  62.     res = months_list[indices]
  63.     if not ascending:
  64.         res = res[::-1]
  65.     return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement