Shanraq.org Shanraq.org
Ввод, вывод и типы данных
Общество

Информатика: создаём своего цифрового помощника Урок 28 из 38

Ввод, вывод и типы данных

Узнаем, почему введённая цифра сначала остаётся текстом, как показать результат и где преобразование может дать ошибку.

Где мы на карте

Это урок 28 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.

Ввод, вывод и типы данных

Ситуация и вопрос

Ученик вводит 2 как число дней до срока. На экране это похоже на число, но программа, получившая строку из клавиатуры, не может прибавить к ней единицу. Почему один и тот же знак «2» может быть двумя разными данными? Разберём ввод на безопасном фиксированном примере, чтобы не зависеть от того, что именно кто-то наберёт.

Новые слова без пропусков

Ввод приносит данные в программу; input() всегда возвращает строку. Вывод показывает результат через print(). Тип задаёт допустимые операции: str — текст, int — целое число, bool — True или False. Преобразование int(raw) пытается прочесть текст как целое число и может вызвать ValueError, если там два или пустая строка. type(value).__name__ позволяет проверить предположение о типе. Само преобразование не проверяет, допустим ли отрицательный срок для вашей задачи.

Опорный сигнал

Вход → проверка правила → изменение состояния → наблюдаемый результат. Покажите пальцем, на каком шаге программа читает данные, где сравнивает их с договором и где только сообщает результат. Если шага не видно на схеме, найдите его в коде и добавьте в собственную трассу.

Разбираем шаг за шагом

Положите на стол карточку с символом 2 и карточку с числом 2. Для первой можно соединить текст: "2" + "1" даёт "21". Для второй сложение даёт 3. В коде raw сначала относится к str, а после int(raw) новое имя days относится к int. Сравните ожидаемый вывод с реальным, затем замените raw на "два" и поймайте строку ошибки. Не пишите eval: нам нужно только целое число, а не выполнение произвольного текста.

Предскажите и проверьте

Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.

raw = "2"
days = int(raw)
print(type(raw).__name__, type(days).__name__)
print(days + 1)

Ожидаемый вывод

str int
3

Поймайте ошибку

Запись int("2.5") тоже вызывает ValueError: целое число не равно десятичной дроби. Не исправляйте это молчаливым округлением. Сначала решите, измеряете ли вы календарные дни или часы, и лишь потом выбирайте тип и правило проверки.

Изменение проекта

Пока помощник лишь показывает преобразование, а не принимает реальные личные данные. Условимся: сроки на этом шаге — вымышленные целые дни; строка "2" превращается в число 2 только явно.

Задание и доказательство

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

Перенос в новую ситуацию

Номер телефона тоже состоит из цифр, но складывать номера не требуется. Почему хранить его как int — плохая идея? Объясните, что произойдёт с начальным нулём и знаком +.

Возврат через 1, 7 и 30 дней

Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.

Следующий урок

Далее: Выражения без скрытых преобразований

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.