Необходимо разработать класс “SalesAnalyzer”, который будет принимать на вход данные о продажах в виде списка словарей. Каждый словарь будет представлять информацию о продаже.
Класс “SalesAnalyzer” должен иметь следующие методы:
1. Метод “describe_sales()”, который будет возвращать общую статистику о продажах.
2. Метод “get_top_by_amount_sales()”, который будет выдавать топ заказов по сумме.
3. Метод “get_sales_by_client()”, который будет выдавать все заказы, которые были совершены данным пользователем.
python
class SalesAnalyzer:
def __init__(self, sales_data):
self.sales_data = sales_data
Метод describe_sales будет возвращать общую статистику о продажах. Для этого пройдемся по каждой записи в sales_data и вычислим значения различных статистик:
- Общая сумма продаж (total_sales_amount) - сумма всех значений ключа 'amount' в словарях.
- Количество заказов (total_sales_count) - количество элементов в списке sales_data.
- Средняя сумма продаж (average_sales_amount) - общая сумма продаж, поделенная на количество заказов.
python
def describe_sales(self):
total_sales_amount = sum(sale['amount'] for sale in self.sales_data)
total_sales_count = len(self.sales_data)
average_sales_amount = total_sales_amount / total_sales_count
sales_info = {
'total_sales_amount': total_sales_amount,
'total_sales_count': total_sales_count,
'average_sales_amount': average_sales_amount
}
return sales_info
Метод get_top_by_amount_sales будет возвращать топ заказов по сумме. Для этого отсортируем список словарей в порядке убывания значений ключа 'amount' и возьмем первые n записей (где n - количество заказов, которое хотим получить).
python
def get_top_by_amount_sales(self, n):
sorted_sales_data = sorted(self.sales_data, key=lambda x: x['amount'], reverse=True)
top_sales = sorted_sales_data[:n]
return top_sales
Метод get_sales_by_client будет возвращать все заказы, которые были совершены данным пользователем. Для этого пройдемся по каждой записи в sales_data и проверим, совпадает ли значение ключа 'client' с заданным пользователем (client). Если значение совпадает, добавим запись в список найденных заказов (client_sales).
python
def get_sales_by_client(self, client):
client_sales = []
for sale in self.sales_data:
if sale['client'] == client:
client_sales.append(sale)
return client_sales
Пример использования класса:
python
sales_data = [
{'client': 'John', 'amount': 100},
{'client': 'Anna', 'amount': 200},
{'client': 'John', 'amount': 150},
{'client': 'Mike', 'amount': 50},
{'client': 'Anna', 'amount': 300},
]
analyzer = SalesAnalyzer(sales_data)
# Получение общей статистики о продажах
sales_stats = analyzer.describe_sales()
print(sales_stats)
# Получение топ-2 заказов по сумме
top_sales = analyzer.get_top_by_amount_sales(2)
print(top_sales)
# Получение всех заказов клиента "Anna"
anna_sales = analyzer.get_sales_by_client('Anna')
print(anna_sales)
Этот код выведет следующий результат:
{'total_sales_amount': 800, 'total_sales_count': 5, 'average_sales_amount': 160.0}
[{'client': 'Anna', 'amount': 300}, {'client': 'Anna', 'amount': 200}]
[{'client': 'Anna', 'amount': 200}, {'client': 'Anna', 'amount': 300}]
Общая статистика о продажах: сумма продаж - 800, количество заказов - 5, средняя сумма продаж - 160.
Топ-2 заказа по сумме: заказ клиента "Anna" на сумму 300 и заказ клиента "Anna" на сумму 200.
Все заказы клиента "Anna": заказ на сумму 200 и заказ на сумму 300.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет