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


Вот полные ответы на все три задания билета № 24, готовые для вставки в `.ipynb` файл.

***

## Задание 1 — Файлы с текстовым представлением информации (20 баллов)

**Теоретическая часть:**

Файлы с текстовым представлением — это файлы, где данные хранятся в виде символов в определённой кодировке (UTF-8, ASCII и др.). Они читаемы человеком в любом текстовом редакторе. Примеры: `.txt`, `.csv`, `.json`, `.py`, `.html`.

**Практическая часть — работа с текстовым файлом в Python:**

```python
# Запись в текстовый файл
with open("example.txt", "w", encoding="utf-8") as f:
    f.write("Привет, мир!\n")
    f.write("Это текстовый файл.\n")

# Чтение из текстового файла
with open("example.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# Чтение построчно
with open("example.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())
```

Конструкция `with open(...)` — рекомендуемый способ работы с файлами, так как файл автоматически закрывается после выхода из блока. Параметр `encoding='utf-8'` гарантирует корректную работу с кириллицей.

***

## Задание 2 — Функция сложения с AssertionError (20 баллов)

```python
def add_positive_numbers(a, b):
    """Складывает два числа. Вызывает AssertionError, если хотя бы одно отрицательное."""
    assert a >= 0, f"Ошибка: число a = {a} отрицательное!"
    assert b >= 0, f"Ошибка: число b = {b} отрицательное!"
    return a + b

# Ввод с клавиатуры
try:
    a = float(input("Введите первое число: "))
    b = float(input("Введите второе число: "))
    result = add_positive_numbers(a, b)
    print(f"Результат: {a} + {b} = {result}")
except AssertionError as e:
    print(f"AssertionError: {e}")
```

**Пример вывода при вводе `5` и `3`:**
```
Результат: 5.0 + 3.0 = 8.0
```
**Пример вывода при вводе `5` и `-2`:**
```
AssertionError: Ошибка: число b = -2.0 отрицательное!
```

***

## Задание 3 — Генератор списков с кортежами (20 баллов)

```python
# Исходный список кортежей
data = [(1, 3, 4), (2, 1), (6,), (2, 2, 2, 1)]

# Генератор списков: если кол-во элементов чётное — удаляем последний, иначе оставляем
result = [t[:-1] if len(t) % 2 == 0 else t for t in data]

print("До:   ", data)
print("После:", result)
```

**Вывод:**
```
До:    [(1, 3, 4), (2, 1), (6,), (2, 2, 2, 1)]
После: [(1, 3, 4), (2,), (6,), (2, 2, 2)]
```

**Логика работы:**
- `(1,3,4)` — 3 элемента (нечётное) → оставляем как есть ✅
- `(2,1)` — 2 элемента (чётное) → удаляем последний → `(2,)` ✅
- `(6,)` — 1 элемент (нечётное) → оставляем как есть ✅
- `(2,2,2,1)` — 4 элемента (чётное) → удаляем последний → `(2,2,2)` ✅

Sources
[1] IMG_4531.jpeg https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/attachments/images/151060499/560c4831-33f1-4702-b871-9259a8a464ac/IMG_4531.jpeg?AWSAccessKeyId=ASIA2F3EMEYE6T3H4N5T&Signature=Jzqp6olY7hbwHgjNaTGuHkZYnnU%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEFEaCXVzLWVhc3QtMSJGMEQCIDpFrQM8uBxORga4ahnunRXD04R%2BV6%2FhKBGD5oD0Z9DdAiAj4ZY%2FA9OlJgoV9MvUj5Q2YgAcOK0ZpDA54mI6dArUPSrzBAgaEAEaDDY5OTc1MzMwOTcwNSIM7WCcf1cepNOq4Y0zKtAED5Tb%2BG%2BTOaeNqJnjcs78Q78e43pLfTK3hxIzAtQ1UWpgf0Z5lmQTfiJFaxKyy317eEz48TRAH2F2PWGKlA6Mmdok2OKy50%2ByF35vgMAqyBG%2BOZUKRDHfqzj84WCVKf0yCzyyuz1YHKZspA7TS2cHhJud960KklFT9R1LqoxUM1O3dmqYhhjbRLBKJlXzvD4viGBG8mlDjFdFHgIQFGudYKh5RV8j9aj3ZHpf7DpryE3cuO%2BnTJ7XI0DZCZZnvP%2BE4esRtW2S1YLXrn4nGgjYSOWQXpGF4M33z42TvllKbBWXKDGRFQKCmy2l4%2Bbnz4H2dcP2hXZ42Blx3fjwo7Oa6g%2Fb6b94yOBrHUiXWOGR0G951%2FQlvvGaSsnbv%2Fzvol%2Bp%2F6kR54whx5nZ7qRHTBE3ePR8QbngrsWkHeTDfFJmQjuHmY5y2Pc0JeRHpKoRrhJRP0zTvF9l7qQNjsU4jQOipz6mV8gmI46fNIlp1PH8V7%2Bla8cd4fXZTcPqbDMT1X2s9rFkl8bAoWQeXGE98JWhvj4Iob09qKeGwpnmt4GEJBWkiyzza%2FxcmBXhWJeubMU7%2FhDU8vOu3GyTAsmLowAlGZtz9AfMyt4b9poV6kGu44ytMGcOPE5iD2v%2FlaHKjybWgO%2BU1mUChe%2Fppj%2BcUZdb%2FOWtRMesdjwGgFvVN%2F1Z3BEB7fv7J8Khhczi95lps8Ufi%2BAKYRYtYQMQfg7DBKND3t7OXr6XUCE0TPeLpu%2FiLXYxyD5WeQWOBO8TAmSTgBDGaVPgYuuH3%2BE3x3CCE3jBpjDwrMDQBjqZAal5wSt1RnRIsWb5Fj0rw8xfGS6QAb0KW9xeymdKyP%2FJ8VocKEh10AebOfjUEM%2B3stWMXLt15B2njTSajr8ULerL%2BHI2%2BJ6Sn3c5sSBoPb96lxlCB3fvixbfT4nn%2FVpQzpz%2FG68jlNiIMq%2F%2Bv5SwBpJXLOYteFTMoHLY7nxgxvHABy0ON0wXuT6TFphLbHt2ZEiZAotnGz%2BkJw%3D%3D&Expires=1779441422