Про "странные числа" в коде
Иногда в ваших программах вам может быть нужно использовать какие-то фиксированные числа, возникающие из смысла задачи. Например, если вы решаете задачу про часы, то, скорее всего, у вас в программе появятся числа типа 60 (минут в часах) или 24 (часов в сутках). Тогда вы прямо указываете это число в программе, как, например, в задаче "Электронные часы - 1" с уровня 1А:
b = a % 60 # питон b := a mod 60; // паскаль
Это абсолютно нормально. (Если вы будете потом писать серьезные большие программы, то от вас могут потребовать заводить специальные переменные-"константы" под эти числа, но сейчас речь не об этом, и в наших задачах это не обязательно.)
Но бывает так, что в программе вам нужно какое-то число, которое вы с ходу не знаете, которое вам надо как-то вычислять. Например, вам надо в программе знать, на какой угол (сколько градусов) сдвигается минутная стрелка за одну минуту. Вряд ли вы это число назовете с ходу из головы. Зато понятно, как его считать: надо полный угол (360 градусов) поделить на 12 часов и то, что получится, поделить на 60 минут.
Что вы в таком случае делаете? Вы берете калькулятор и на нем считаете, сколько будет 360/12/60
. Вы получаете 0.5 и прямо так и оставляете это число (0.5) прямо в коде программы:
b = a * 0.5 # питон b := a * 0.5; // паскаль
Вот это уже неправильный подход.
Любой язык программирования прекрасно работает как калькулятор. Поэтому не надо использовать внешний калькулятор. Просто напишите в программе прямо полностью выражение:
b = a * 360 / 12 / 60 # питон b := a * 360 / 12 / 60; // паскаль
Вот так — намного лучше. Почему?
- Во-первых, так проще. Вам не надо лезть в калькулятор, считать там что-то, и вводить результат число в программу. Вы сразу тут вводите формулу, и компьютер делает работу за вас.
- Во-вторых, так надежнее. Вы можете случайно ввести в калькулятор не то число, или ошибиться при вводе результата в программу. Частая ситуация — если результат получается в виде длинной десятичной дроби, то вы вручную можете ввести слишком мало знаков. А компьютер посчитает за вас настолько точно, насколько он только может.
- Наконец, так понятнее. Если вы вернетесь к своей программе через неделю, вы вряд ли сразу вспомните, что такое 0.5 и откуда вы его взяли. А если вы увидите формулу
360/12/60
, все сразу станет понятнее, т.к. 360, 12 и 60 — вполне понятные в этой задаче числа, и скорее всего вы сразу вспомните, почему что и на что вы делили. Аналогично, программа будет понятнее для других людей, кто ее будет смотреть. Наконец, если у вас в формуле на самом деле ошибка (как простейший пример — вы разделили на 24 вместо 12), то заметить ее намного проще, чем если бы у вас в программе был только результат.
Аналогичные соображения относятся и к другим ситуациям. Например, вам в программе может потребоваться код символа A. Вы можете посмотреть в таблицу символов и увидеть, что это 65. А можете написать ord('A')
. Вот второй вариант намного лучше первого — пусть компьютер сам за вас считает, преимущества все те же, что описаны выше. Если вам надо знать, насколько коды заглавных букв отличаются от маленьких — тоже пишите формулу. И т.д.
Вообще, общее правило: