Статья Автор: Корельская Елена Юрьевна

Теория

Все ошибки при написании программного кода можно разделить на две группы:
  1. Синтаксические ошибки – это ошибки, связанные с нарушением правил синтаксиса языка программирования. Они возникают из-за опечаток, неверного использования операторов и ключевых слов, а также неправильной структуры кода. Такие ошибки не вызывают запуск программы. Среда разработки позволяет обнаруживать синтаксические ошибки, указывает строку, в которой обнаружена синтаксическая ошибка и указывает ее тип. Например,
    1. Неверно написанные служебные слова (print, input, for и прочее)
    2. Непарные скобки, кавычки
    3. Отсутствие отступа
    4. Пропущенное двоеточие, запятая и других знаков препинания
    5. Несколько else к одному if
    6. Отсутствие условия в elif
    7. Использование несуществующих переменных
    8. Применение операций // и % для вещественных чисел
  2. Логические ошибки – это ошибки, которые приводят к неправильному функционированию программы и неправильным результатам работы программного кода. Они возникают из-за неверных логических рассуждений, использование неверного алгоритма решения. Логические ошибки могут быть сложными для обнаружения и исправления, так как они проявляются только во время работы программы. Например,
    1. Использование неверных условий
    2. Использование if, там, где необходим elif
    3. Неверная формула
    4. Использование некорректной переменной в формуле
  3. Для исправления логических ошибок удобно использовать отладчик, встроенный в среду программирования.
Проиллюстрируем поиск логических ошибок и работу с отладчиком на примере задачи:

Задача:
Оператор мобильной связи предоставляет своим пользователям три тарифа:
Тариф 1: ежемесячная плата составляет 700 рублей, независимо от количества использованных минут и гигабайт.
Тариф 2: 1 рубль в минуту для входящих звонков и 150 рублей за каждый Гбайт интернета.
Тариф 3: 1,5 рубля в минуту для входящих звонков и 50 рублей за каждый Гбайт интернета.
По введенным среднемесячным данным клиента a –количество используемых минут, b –количество Гбайт интернета, рекомендовать тариф. Если стоимость тарифов одинаковая, то рекомендовать тариф с меньшим номером.
Входные данные: целое число a –количество минут, целое число b – количество Гбайт. Каждое число вводится с новой строки
Выходные данные: одна из строк «Тариф 1», «Тариф 2», «Тариф 3» в зависимости от рекомендованного тарифа.
Пример
Входные данные Выходные данные
100
100
Тариф 1
100
10
Тариф 3
200
1
Тариф 2

Программист написал программный код для решения этой задачи. Заметим, что программа запускается - синтаксических ошибок нет. А ответ выводит неверно, следовательно есть логические ошибки.
 


Для начала установим точку останова – строка кода, начиная с которой предположительно программа работает неверно. В нашем случае – строка 4, так как в первых двух строках происходит безошибочный ввод данных, в третьей – задание тарифа 1.

При вводе данных из примера 1, выводит две строки, вместо одной. Найдем причину, для этого запустим пошаговую отладку кода. В большинстве сред программирования для этого можно сделать либо через основное меню «Debug», либо через кнопку с изображением жука «Debug». Введем данные из примера: 100 100.
При помощи кнопки «Step» запускаем построчное выполнение кода.  При этом видно, как меняются значения переменных и что выводится на экран. Становится понятно, что выводится два рекомендованных тарифа так как входим и в первый, и во второй if, else относится к последнему if. Так как рекомендуется лишь один тариф, то необходимо использовать конструкцию if…elif...else. Теперь при данных из примера 1 программа выполняется верно.
 


Запустим тест из второго примера: 100 10. Ответ вновь неверный. Возможно, неверно заданы условия для каждого из тарифов. Действительно, если расходы по тарифу 1 минимальные, значит должны выполняться 2 условия d < f и d < k, то есть стоимость по тарифу 1 меньше, чем по тарифу 2 и меньше, чем по тарифу 3. Перепишем условия:
 


Теперь программа на тестах 1 и 2 работает верно. Запустим тест из третьего теста: 200 1. Программа работает неверно. Подсчитаем какой будет оплата по каждому из тарифов: по первому – 700 рублей, по второму и третьему – 350 рублей. В условии задачи сказано, что если стоимость тарифов одинаковая, то рекомендовать тариф с меньшим номером. Тогда нужно немного изменить условия:
 


Тесты 1 и 2 работают верно, а третий по-прежнему неверно. Запустим пошаговую отладку и посмотрим значения переменных d, f и k после выполнения строк 1-5 программного кода.

Видно, что переменная  f не 350, как мы вычислили ранее. Значит ошибка в строке с вычислением переменной f (строка 4). Действительно, при вычислении использовалась переменная d, а не b.
 


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


Одна из частых логических ошибок – неверно записанное условие. Определить истинно условие или нет можно с помощью логических переменных. Логические переменные в Python имеют тип bool и могут принимать всего два значения: True – истина, False  - ложь. (True и False пишутся с заглавной буквы).
Задача. Верно ли, у введенного числа n количество десятков равно 3 и число больше 100.
Вывести True или False.
Решение:
 


Программа при n = 1234 выдаст значение True, а при n = 34, n = 987, n = 5 – значение False.

 
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать