Урок 2: Собираем паззл: из деталей — в программу

Сегодня мы поговорим о том, как управлять ошибками, работать с файлами и использовать чужой код. Это уже почти магия!


Часть 1: «Ой, я ошибся!» — Обработка исключений (Try/Except)

В жизни бывает: тянешься за чашкой, а она падает. В программировании тоже: просишь пользователя ввести число, а он вводит слово. Программа ругается и закрывается. Наша задача — поймать падающую чашку до того, как она разобьётся.

Вот как это выглядит без нашей защиты:

number = int(input("Введите число: ")) # int() преобразует текст в число
print("Вы ввели:", number)

Если ввести “пять”, программа аварийно остановится с страшной ошибкой ValueError.

Решаем проблему: Ставим мягкий батут вместо бетонного пола.

try:    # Попробуй сделать этот код...
    number = int(input("Введите число: "))
    print("Всё ок, вы ввели:", number)
except ValueError:  # ...если случилась ОШИБКА ПРЕОБРАЗОВАНИЯ (ValueError)...
    print("Эй, это же не число! Попробуй ещё раз.") # ...сделай вот это.

# Программа не сломается, а вежливо попросит ещё раз!

Это называется обработка исключений. Теперь твои программы становятся вежливыми и неубиваемыми!


Часть 2: «Помни всё» — Работа с файлами

Программы живут в оперативной памяти и всё забывают после закрытия. Чтобы сохранить данные (результаты игры, список дел), нужно записать их в файл. Это как консервация.

Запись в файл:

# Открываем (или создаем) файл 'notes.txt' для записи ('w' - write)
# 'w' всегда сначала полностью очищает файл
with open('notes.txt', 'w', encoding='utf-8') as file:
    file.write("Купить хлеб\n")  # \n - это перенос строки
    file.write("Выучить Python\n")

print("Записал! Посмотри файл 'notes.txt' рядом со своей программой.")

Ключевое слово with — это лучший способ. Оно само закроет файл после работы, даже если произойдет ошибка. Как автоматическая дверь, которая захлопывается сама.

Чтение из файла:

# Открываем тот же файл для чтения ('r' - read)
with open('notes.txt', 'r', encoding='utf-8') as file:
    content = file.read() # Читаем ВСЁ содержимое сразу

print("Вот что у нас записано:")
print(content)

А можно читать построчно, чтобы обрабатывать каждую задачу отдельно:

with open('notes.txt', 'r', encoding='utf-8') as file:
    for line in file:   # Читаем файл построчно
        print("Задача:", line.strip()) # .strip() убирает лишние пробелы и переносы

Часть 3: «Не изобретай велосипед» — Модули и импорт

Зачем самому писать код для сложной математики, если кто-то уже это сделал? В Python есть куча готовых «чемоданов с инструментами» — они называются модули.

Ты просто говоришь Python: «Принеси мне тот чемодан, я буду использовать инструменты из него».

Пример с модулем math:

import math  # Импортируем модуль для сложной математики

# Теперь используем инструменты из этого модуля через точку
print("Квадратный корень из 16:", math.sqrt(16))
print("Число Пи — это примерно:", math.pi)
print("Синус 90 градусов:", math.sin(math.radians(90))) # Переводим градусы в радианы и считаем синус

Пример с модулем random (для игр):

import random

# Загадываем число от 1 до 10
secret_number = random.randint(1, 10)
print("Я загадал число от 1 до 10. Попробуй угадать!")

# Бросаем игральный кубик
dice_roll = random.randint(1, 6)
print("На кубике выпало:", dice_roll)

# Случайный выбор кого-либо из списка
players = ["Аня", "Боря", "Витя", "Галя"]
print("Водит:", random.choice(players))

Устанавливать эти модули не нужно — они уже есть в стандартной поставке Python!


Часть 4: Практика! Соберём всё вместе.

Давай напишем простую программу-ежедневник. Она будет: 1. Показывать список дел при запуске. 2. Спрашивать, хочешь ли ты добавить новое дело. 3. Записывать его в файл (и не ломаться при ошибках).

# -*- coding: utf-8 -*-
filename = "my_todos.txt"

# 1. Пробуем прочитать и показать существующие задачи
try:
    with open(filename, 'r', encoding='utf-8') as file:
        print("Мой список дел:")
        print(file.read())
except FileNotFoundError: # Обрабатываем ошибку "Файл не найден"
    print("Пока дел нет. Самое время добавить первое!")

# 2. Спрашиваем у пользователя про новое дело
new_task = input("\nВведи новое дело (или нажми Enter чтобы выйти): ")

if new_task: # Если строка не пустая
    # 3. Открываем файл в режиме ДОЗАПИСИ ('a' - append)
    with open(filename, 'a', encoding='utf-8') as file:
        file.write(new_task + "\n") # Добавляем дело в конец файла
    print("Задача добавлена!")
else:
    print("Ну ладно, пока!")

Задание для тебя: Улучши эту программу! Сделай так, чтобы она нумеровала задачи при выводе. Или чтобы можно было не только добавлять, но и удалять сделанные дела (это сложнее, но очень интересная задача!).


Что дальше? Ты теперь умеешь очень многое: данные, логика, функции, файлы, ошибки, модули. Этого хватит для десятков полезных скриптов.

Главное — продолжай кодить. Каждая ошибка — это новый урок. У тебя всё получится!