Chapter 3: Игры-тесты и оператор If
Как нам проверить, что игрок побил своё рекордное количество очков? Как нам проверить, что у него больше нет жизненных очков? Как нам проверить, что у него есть ключ для того, чтобы открыть двери? Видео: введение в условный оператор if
Оператор if - то, что нам нужно. If также известен как условный оператор. (Вы можете использовать словосочетание “условный оператор”, когда захотите удивить всех своим умом.) If позволяет компьютеру принять решение. Тепло ли снаружи? Достиг ли космический корабль предела экрана? Было ли выведено со счёта слишком много денег? Программа может проверять эти условия с помощью оператора if .
3.1 Основные сравнения
В связи с тем, что a меньше b, при запуске программы сработает только вывод данных под первым условием. Если бы обе переменные, a и b, были равны 4, то ни одно из вышеприведённых условий if не сработало. Цифра 4 не больше 4, так что оператор if не сработает.
Следующий пример показывает, что использовать для проверки, является ли величина большей, либо равной заданному значению:
Символы <= и >= должны быть использованы в этом порядке и между ними не должно быть пробела. Например =< не сработает, как не сработает и < = .
Когда такие выражения пишутся в тетрадях, на контрольных, ученики любят использовать символ ≤ Например:
Как утверждает комментарий, этот символ не работает в программе. Плюс, большинство людей не знают, как легко набрать его на клавиатуре. (Зажмите клавишу 'alt' и наберите цифры 243 на дополнительной цифровой клавиатуре.) Так что, когда пишете код, помните использовать <=, а не ≤.
Очень легко спутать == и = . Используйте == если вы проверяете значения на равенство. Используете = в случае присваивания значения переменной.
Две наиболее частые ошибки с операторами = и == показаны снизу:
Стоп! Перечитайте ещё раз вышеприведённый пример кода. Сохраните своё время, разобравшись, когда нужно использовать = и == . Не старайтесь просто угадывать.
3.2 Отступы
Отступы важны. Каждая сдвинутая строка под выражением if будет выполнена только если само выражение if является истинным:
Отступы должны быть одинаковыми. Следующий код не работает:
Когда выражение if было выполнено, а затем были использованы строки кода без отступа, невозможно снова сделать отступ и вернуться к нему. Проверка должна быть выполнена ещё раз.
3.3 Использование And/Or
Оператор if может проверять несколько условий, связывая их вместе с помощью операторов and (“и”) и or (“или”).
Частая ошибка - не использование повторно имени переменной при проверке нескольких условий. Нижеприведённый код не работает, потому что компьютер не знает, что делать с переменной c и что с нею сравнивать. Он не догадается, что нужно сравнить её с a .
3.4 Булевые переменные
Python поддерживает булевые переменные. Что такое булевые переменны? Булевые переменные могут хранить в себе значения True (“Верно”) или False (“Ложно”). Булевая алгебра была разработана Джорджем Булем в 1854 году. Если бы он только мог представить, насколько важным его работа проявит себя, став основой соверменной компьютерной логики!
Оператор if требует выражения для оценки, True (Верное) оно или False (Ложное). Что может показаться странным, так это то, что не нужно никаких сравнений если у переменной уже есть значение True или False .
Когда я учился в школе, было принято делать ложные заявления. А затем, подождав три секунды, крикнуть “НЕТ!” Ну, даже ваш компьютер думает, что это глупо. Если вы собираетесь это делать, то нужно применить функцию not() . Следующий код использует функцию not() для изменения значения a между истинным и ложным.
Возможно использовать переменные типа Boolean вместе с операторами and и or .
Возможно также присваивать переменной результат сравнения. В нижеприведённом коде, сравниваются переменные a и b . Если они равны, c будет равен True , в ином случае c будет False .
Возможно создать выражение if для условия, которое не равняется True или False. Обычно, это не является предпочтительным, но нам важно понять, как компьютер обращается с подобными переменными во время поиска проблем. Следующие выражения корректны, и в итоге каждая строка будет напечатана, потому что значения внутри выражения if не являются равными нулю:
Нижеприведённый код ничего не выведет, потому что значение в выражении if равняется нулю, что расценивается компьютером как False. Любое другое значение расценивается как True.
В нижеприведённом коде, первый if кажется работающим. Проблема в том, что он всегда будет считаться истинным, даже если переменная a не равняется b . Это потому, что b сам по себе считается истинным.
3.5 Else и Else If
Нижеприведённый код возьмёт температуру, введённую пользователем, и скажет, жарко ли сейчас.
Если программист хочет, чтобы какой-то код был выполнен, даже если снаружи не горячо, он должен использовать оператор else (”Иначе“). Заметьте, как else находится на том же уровне, что и i из выражения с if и как за ним следует двоеточие, подобно тому, как это происходит в выражении if .
В случае использования if. else один из блоков кода всегда будет выполнен. Первый блок будет выполнен, если выражение внутри if будет равно True , второй же блок кода будет выполнен в случае, если выражение равно False .
Возможно поставить несколько операторов if подряд, используя выражение else. if . Python сокращает его как elif . Видео: логичный порядок в выражениях if
В нижеприведённом коде, программа выведет "Снаружи жарко", даже если пользователь введёт 120 градусов. Почему? Как можно исправить этот код?
Если вы не можете разобраться, посмотрите видео.
3.6 Сравнение текста
Возможно использовать выражение if для проверки текста. (Этот пример работать не будет, если вы используете Eclipse, а не рекомендованную среду IDLE, потому что ввод содержит в себе лишний перенос строки в конце.)
Предыдущий пример сработает, только если было введено имя “Paul”. Он не сработает, если пользователь введёт “paul” или “PAUL”.
Частая ошибка - забыть кавычки вокруг сравниваемых строк. В нижеприведённом примере, компьютер подумает, что Paul - переменная, которая хранит значение. Он отметит это как ошибку, потому что он не знает, что же на самом деле храниться в переменной Paul .
3.6.1 Разные возможности текстаКогда сравниваете переменную с разными строками текста, важно помнить, что сравнение должно включать саму переменную. Например:
Вместо этого, следует использовать код:
Это потому, что любое значение, кроме нуля, воспринимается компьютером как True . Так что для компьютера "Mary" - то же самое, что и True . Поэтому он запустит код, находящийся внутри выражения if .
3.6.2 Сравнения, не принимая во внимание регистр буквЕсли программе надо сравнить строку вне зависимости от того, была введена она большими или маленькими буквами, легче всего преобразовать каждую букву строки в строчную(маленькую). Это может быть сделано с помощью команды lower .
Нижеприведённый пример возьмёт любой ввод пользователя, превратит его буквы в маленькие, а затем проведёт сравнение. Важно: не сравнивайте её со строкой, в которой есть заглавные буквы. Если ввод пользователя переделан в маленькие буквы, тогда сравнивая его с заглавными буквами, никогда не будет получен результат True.
3.7 Примеры выражений if
Следующий набор кода покажет все принципы, оговорённые ранее. Видео проходит по каждой строке кода и объясняет её. Видео: Примеры использования if