Загрузка данных


**Задание 1. Математический калькулятор**
```python
def calculate(operation, *args):
    if operation == "sum":
        return sum(args)
    elif operation == "product":
        result = 1
        for num in args:
            result *= num
        return result
    elif operation == "max":
        return max(args) if args else None
    elif operation == "min":
        return min(args) if args else None
    elif operation == "avg":
        return sum(args) / len(args) if args else None
    else:
        print("Ошибка: неизвестный режим")
        return None

```
**Задание 2. Приветствие группы**
```python
def greet_all(greeting, *names):
    if not names:
        print("Некого приветствовать")
    else:
        for name in names:
            print(f"{greeting}, {name}!")

```
**Задание 3. Карточка пользователя**
```python
def print_profile(**kwargs):
    if not kwargs:
        print("Профиль пуст")
    else:
        for key, value in kwargs.items():
            print(f"{key}: {value}")

```
**Задание 4. Чек заказа**
```python
def print_order(customer, **items):
    print(f"Заказ для: {customer}")
    total_sum = 0
    for item, price in items.items():
        print(f"{item} — {price} руб.")
        total_sum += price
    print(f"Итого: {total_sum} руб.")

```
**Задание 5. Фильтр чисел**
```python
def filter_numbers(*args, min=None, max=None):
    filtered = []
    for num in args:
        if (min is None or num >= min) and (max is None or num <= max):
            filtered.append(num)
    return filtered

```
**Ответы на контрольные вопросы:**
 1. **В чём разница между *args и обычным параметром-списком?**
   *args автоматически упаковывает переданные через запятую аргументы в кортеж, тогда как параметр-список требует передачи одного готового объекта (списка).
 2. **Можно ли передать в *args именованный аргумент?**
   Нет. *args предназначен исключительно для позиционных аргументов. Передача именованного аргумента приведет к ошибке TypeError.
 3. **Что произойдёт, если написать def f(**kwargs, *args)?**
   Возникнет синтаксическая ошибка SyntaxError, так как *args должен всегда стоять перед **kwargs.
 4. **Каков порядок следования параметров в сигнатуре функции?**
   1. Обычные (позиционные). 2. *args. 3. Именованные (keyword-only). 4. **kwargs.