Программирование аркадных игр и обучение информатике

Программирование аркадных игр
и обучение информатике

Chapter 3: Игры-тесты и оператор If

Как нам проверить, что игрок побил своё рекордное количество очков? Как нам проверить, что у него больше нет жизненных очков? Как нам проверить, что у него есть ключ для того, чтобы открыть двери?

Видео: введение в условный операторif

Оператор if - то, что нам нужно. If также известен как условный оператор. (Вы можете использовать словосочетание “условный оператор”, когда захотите удивить всех своим умом.) If позволяет компьютеру принять решение. Тепло ли снаружи? Достиг ли космический корабль предела экрана? Было ли выведено со счёта слишком много денег? Программа может проверять эти условия с помощью оператора if.

3.1 Основные сравнения

Вот несколько примеров использования оператора if. Первая часть устанавливает три переменные (a, b и c) для использования в операторе if. Затем, два условия с if показывают, как сравнить переменные, чтобы увидеть, какая из них больше.
# Переменные, используемые в примере с оператором if
a = 4
b = 5

# Простые сравнения
if a<b:
    print("a меньше b")

if a>b:
    print("a больше b")
	
print("Готово")
Переменные:
a=4
b=5
Вывод:
a меньше b
Готово

В связи с тем, что a меньше b, при запуске программы сработает только вывод данных под первым условием. Если бы обе переменные, a и b, были равны 4, то ни одно из вышеприведённых условий if не сработало. Цифра 4 не больше 4, так что оператор if не сработает.

Следующий пример показывает, что использовать для проверки, является ли величина большей, либо равной заданному значению:

if a<=b:
    print("a меньше либо равна b")

if a>=b:
    print("a больше либо равна b")

Символы <= и >= должны быть использованы в этом порядке и между ними не должно быть пробела. Например =< не сработает, как не сработает и < =.

Когда такие выражения пишутся в тетрадях, на контрольных, ученики любят использовать символ ≤ Например:

# Это не работает
if a ≤ b:
    print("a меньше либо равно b")

Как утверждает комментарий, этот символ не работает в программе. Плюс, большинство людей не знают, как легко набрать его на клавиатуре. (Зажмите клавишу 'alt' и наберите цифры 243 на дополнительной цифровой клавиатуре.) Так что, когда пишете код, помните использовать <=, а не ≤.

# Равенство
if a==b:
    print("a равно b")
   
# Неравенство
if a != b:
    print("a не равно b")
Внимание! Частая ошибка.

Очень легко спутать == и =. Используйте == если вы проверяете значения на равенство. Используете = в случае присваивания значения переменной.

Две наиболее частые ошибки с операторами = и == показаны снизу:

# Это не правильно
a==1
	
# Это тоже не правильно
if a=1:
    print("A равен 1")

Стоп! Перечитайте ещё раз вышеприведённый пример кода. Сохраните своё время, разобравшись, когда нужно использовать = и ==. Не старайтесь просто угадывать.

3.2 Отступы

Отступы важны. Каждая сдвинутая строка под выражением if будет выполнена только если само выражение if является истинным:

if a==1:
    print("Если a равно единице, то выведется эта строка.")
    print("А также эта.")
    print("И эта.")
	
print("Эта строка всегда будет выводиться на экран.")

Отступы должны быть одинаковыми. Следующий код не работает:

if a==1:
  print("Отступ в два пробела.")
    print("Отступ в четыре. Покажется ошибка.")
   print("Компьютер пожелает, чтобы всё было ясно.")

Когда выражение if было выполнено, а затем были использованы строки кода без отступа, невозможно снова сделать отступ и вернуться к нему. Проверка должна быть выполнена ещё раз.

if a==1:
    print("Если a равно единице, то это выведется на экран.")
    print("Как и это.")

print("Это всегда будет выводиться на экран.")
    print("Покажется ошибка. Для чего был предназначен этот отступ?")

3.3 Использование And/Or

Оператор if может проверять несколько условий, связывая их вместе с помощью операторов and(“и”) и or(“или”).

# And, и, оба условия должны выполняться
if a < b and a < c:
    print("a меньше, чем b и c")
 
# Or, или, достаточно выполнения одного из условий
if a < b or a < c:
    print("a меньше, чем a или c (или оба)")
Пожалуйста, повторяйтесь.

Частая ошибка - не использование повторно имени переменной при проверке нескольких условий. Нижеприведённый код не работает, потому что компьютер не знает, что делать с переменной c и что с нею сравнивать. Он не догадается, что нужно сравнить её с a.

# Это не верно
if a < b or < c:
    print("a меньше, чем b и c")

3.4 Булевые переменные

Python поддерживает булевые переменные. Что такое булевые переменны? Булевые переменные могут хранить в себе значения True(“Верно”) или False(“Ложно”). Булевая алгебра была разработана Джорджем Булем в 1854 году. Если бы он только мог представить, насколько важным его работа проявит себя, став основой соверменной компьютерной логики!

Оператор if требует выражения для оценки, True (Верное) оно или False(Ложное). Что может показаться странным, так это то, что не нужно никаких сравнений если у переменной уже есть значение True или False.

# Булевый тип данных. Это выражение корректно!
a=True
if a:
    print("a is true")

Когда я учился в школе, было принято делать ложные заявления. А затем, подождав три секунды, крикнуть “НЕТ!” Ну, даже ваш компьютер думает, что это глупо. Если вы собираетесь это делать, то нужно применить функцию not(). Следующий код использует функцию not() для изменения значения a между истинным и ложным.

# Как использовать функцию not
if not(a):
    print("a - ложно")

Возможно использовать переменные типа Boolean вместе с операторами and и or.

a=True
b=False

if a and b:
    print("Оба a и b являются верными")
Кто знал, что True/False могут быть сложными?

Возможно также присваивать переменной результат сравнения. В нижеприведённом коде, сравниваются переменные a и b. Если они равны, c будет равен True, в ином случае c будет False.

a=3
b=3
# Следующая строка кода выглядит странно, но она корректна.
# c будет равен True или False, в зависимости от равенства
# a и b.
c = a == b
# Выводит значение c, в данном случае True
print(c)
0 значит False. Всё остальное - True.

Возможно создать выражение if для условия, которое не равняется True или False. Обычно, это не является предпочтительным, но нам важно понять, как компьютер обращается с подобными переменными во время поиска проблем. Следующие выражения корректны, и в итоге каждая строка будет напечатана, потому что значения внутри выражения if не являются равными нулю:

if 1:
	print("1")
if "A":
	print("A")

Нижеприведённый код ничего не выведет, потому что значение в выражении if равняется нулю, что расценивается компьютером как False. Любое другое значение расценивается как True.

if 0:
	print("Ноль")

В нижеприведённом коде, первый if кажется работающим. Проблема в том, что он всегда будет считаться истинным, даже если переменная a не равняется b. Это потому, что b сам по себе считается истинным.

a="c"
if a=="B" or "b":
	print("a равно b. Возможно.")
	
# Это лучший метод написания выражения if.
if a=="B" or a=="b":
	print("a равняется b.")

3.5 Else и Else If

Нижеприведённый код возьмёт температуру, введённую пользователем, и скажет, жарко ли сейчас.

temperature=int(input("Какова температура по Фаренгейту? "))
if temperature > 90:
    print("Снаружи жарко")
print("Готово")

Если программист хочет, чтобы какой-то код был выполнен, даже если снаружи не горячо, он должен использовать оператор else(”Иначе“). Заметьте, как else находится на том же уровне, что и i из выражения с if и как за ним следует двоеточие, подобно тому, как это происходит в выражении if.

В случае использования if...else один из блоков кода всегда будет выполнен. Первый блок будет выполнен, если выражение внутри if будет равно True, второй же блок кода будет выполнен в случае, если выражение равно False.

temperature=int(input("Какова температура по Фаренгейту? "))
if temperature > 90:
    print("Снаружи жарко")
else:
    print("Снаружи нежарко")
print("Готово")

Возможно поставить несколько операторов if подряд, используя выражение else...if. Python сокращает его как elif.

temperature=int(input("Какова температура по Фаренгейту? "))
if temperature > 90:
    print("Снаружи жарко")
elif temperature < 30:
    print("Снаружи холодно")
else:
    print("Снаружи нежарко")
print("Готово")
Видео: логичный порядок в выражениях if

В нижеприведённом коде, программа выведет "Снаружи жарко", даже если пользователь введёт 120 градусов. Почему? Как можно исправить этот код?

Если вы не можете разобраться, посмотрите видео.

temperature=int(input("Какова температура по Фаренгейту? "))
if temperature > 90:
    print("Снаружи жарко")
elif temperature > 110:
    print("О Боже, кажется на асфальте можно жарить омлет!")
elif temperature < 30:
    print("Снаружи холодно")
else:
    print("Снаружи неплохо")
print("Готово")

3.6 Сравнение текста

Возможно использовать выражение if для проверки текста. (Этот пример работать не будет, если вы используете Eclipse, а не рекомендованную среду IDLE, потому что ввод содержит в себе лишний перенос строки в конце.)

userName = input("Как тебя зовут? ")
if userName == "Paul":
    print("У тебя отличное имя.")
else:
    print("У тебя неплохое имя.") 

Предыдущий пример сработает, только если было введено имя “Paul”. Он не сработает, если пользователь введёт “paul” или “PAUL”.

Частая ошибка - забыть кавычки вокруг сравниваемых строк. В нижеприведённом примере, компьютер подумает, что Paul - переменная, которая хранит значение. Он отметит это как ошибку, потому что он не знает, что же на самом деле храниться в переменной Paul.

userName = input("Как тебя зовут? ")
if userName == Paul: # Это не работает, потому что не поставлены кавычки
    print("У тебя отличное имя.")
else:
    print("У тебя неплохое имя.") 

3.6.1 Разные возможности текста

Когда сравниваете переменную с разными строками текста, важно помнить, что сравнение должно включать саму переменную. Например:

# Это не работает! Всегда будет считаться как True
if userName== "Paul" or "Mary":

Вместо этого, следует использовать код:

# Это работает
if userName == "Paul" or userName == "Mary":

Это потому, что любое значение, кроме нуля, воспринимается компьютером как True. Так что для компьютера "Mary" - то же самое, что и True. Поэтому он запустит код, находящийся внутри выражения if.

3.6.2 Сравнения, не принимая во внимание регистр букв

Если программе надо сравнить строку вне зависимости от того, была введена она большими или маленькими буквами, легче всего преобразовать каждую букву строки в строчную(маленькую). Это может быть сделано с помощью команды lower.

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

userName = input("Как тебя зовут? ")
if userName.lower() == "paul":
    print("У тебя отличное имя.")
else:
    print("У тебя неплохое имя.")

3.7 Примеры выражений if

Следующий набор кода покажет все принципы, оговорённые ранее. Видео проходит по каждой строке кода и объясняет её.

Видео: Примеры использования if
# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://programarcadegames.com/
# http://simpson.edu/computer-science/

# Explanation video: http://youtu.be/pDpNSck2aXQ

# Variables used in the example if statements
a = 4
b = 5
c = 6

# Basic comparisons
if a < b:
    print("a is less than b")

if a > b:
    print("a is greater than than b")

if a <= b:
    print("a is less than or equal to b")

if a >= b:
    print("a is greater than or equal to b")

# NOTE: It is very easy to mix when to use == and =.
# Use == if you are asking if they are equal, use =
# if you are assigning a value.
if a == b:
    print("a is equal to b")

# Not equal
if a != b:
    print("a and b are not equal")

# And
if a < b and a < c:
    print("a is less than b and c")

# Non-exclusive or
if a < b or a < c:
    print("a is less than either b or c (or both)")


# Boolean data type. This is legal!
a = True
if a:
    print("a is true")

if not a:
    print("a is false")

a = True
b = False

if a and b:
    print("a and b are both true")

a = 3
b = 3
c = a == b
print(c)

# These are also legal and will trigger as being true because
# the values are not zero:
if 1:
    print("1")
if "A":
    print("A")

# This will not trigger as true because it is zero.
if 0:
    print("Zero")

# Comparing variables to multiple values.
# The first if statement appears to work, but it will always
# trigger as true even if the variable a is not equal to b.
# This is because "b" by itself is considered true.
a = "c"
if a == "B" or "b":
    print("a is equal to b. Maybe.")

# This is the proper way to do the if statement.
if a == "B" or a == "b":
    print("a is equal to b.")

# Example 1: If statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
print("Done")

# Example 2: Else statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
else:
    print("It is not hot outside")
print("Done")

# Example 3: Else if statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is not hot outside")
print("Done")

# Example 4: Ordering of statements
# Something with this is wrong. What?
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature > 110:
    print("Oh man, you could fry eggs on the pavement!")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is ok outside")
print("Done")

# Comparisons using string/text
# Note, this example does not work when running under Eclipse
# because the input will contain an extra carriage return at the
# end. It works fine under IDLE.
userName = input("What is your name? ")
if userName == "Paul":
    print("You have a nice name.")
else:
    print("Your name is ok.")

3.8 Проверка пройденного

Нажмите здесь для теста с несколькими вариантами ответов (англ. яз).

  1. Исправьте следующий код:
    temperature = float (input("Температура")
    if temperature > 90:
        print("Снаружи жарко.")
    
  2. В этом коде две ошибки. Одна не даёт ему запуститься, другая менее очевидна.
    x == 4
    if x >= 0:
        print("x - положительное число.")
    else:
        print("x - не положительное число.")
    
  3. В этом коде четыре ошибки. Скопируйте код в IDLE и найдите ошибки.
    answer = input("Как зовут помощника Доктора Bunsen Honeydew?")
    if a = "Beaker":
        print("Верно!")
        else
        print("Неверно! Его имя Beaker.")
    
  4. Исправьте следующий код:
    userInput = input("Вишня - это:")
    print("A. Верхушка десерта")
    print("B. Верхушка пустыни")
    if userInput=="A":
        print("Верно!")
    
  5. Найдите три ошибки в следующем коде:
    x=input("Введите число:")
    if x=3
        print("Вы ввели 3")
    
  6. Эта программа неправильно работает. Почему?
    x=input("How are you today?")
    if x=="Happy" or "Glad":
        print("That is good to hear!")
    
  7. Посмотрите на нижеприведённый код. Подумайте, что он может вывести на экран. Затем, запустите его и проверьте, правы ли вы были:
    x = 5
    y = x == 6
    z = x == 5
    print("x=",x)
    print("y=",y)
    print("z=",z)
    if y:
        print("Fizz")
    if z:
        print("Buzz")
    
  8. Исправьте код:
    answer = input("Истинно или ложно, 3+4 равняется 7?")
    a=True
    b=False
    if a:
        print("Верно")
    else:
        print("Неверно")
    
  9. Напишите программу на Python, которая будет просить пользователя ввести число, а затем говорить, является ли введённое число позитивным, негативным либо нулём.
  10. Напишите программу на Python, которая будет просить пользователя ввести число, а затем писать “Успех”, если число больше, чем -10 и меньше, чем 10.

3.9 Лабораторная работа 2

Завершите Лабораторную Работу 2 “Создайте свой тест” для того, чтобы создать свою программу, которая спрашивает ответы у пользователя. Убедитесь, что вы понимаете, как использовать оператор if.


You are not logged in. Log in here and track your progress.