Program Arcade Games
With Python And Pygame

Chapter 3: Teste Jogos e Declarações se (if)

Como podemos informar ao jogador se ele conseguiu um escore alto? Como podemos informar que ele já perdeu todas as vidas? Como informar que ela tem a chave requerida para abrir a porta que está fechada??

Video: Introduction to the if statement

O que nós precisamos é de uma declaração SE if statement. Uma declaração SEif é também conhecida como declaração de condição. (Você pode usar o termo “conditional statement” quando você quiser mostrar o quanto inteligente você é.) O declaração SE, if permite a um computador tomar uma descisão, por exemlo. Está quente lá fora? A espaçonave chegou na borda da tela?? Tem muito dinheiro sendo retirado da conta? Um programa pode testar estas condições usando uma declaração SE if.

3.1 Basic Comparisons

Aqui estão alguns exemplos do uso da declaração SE if. A primeira seção define duas variáveis (a e b) para usar com a declaração SEif. Depois, usamos duas declarações SE if para comparar as duas variaveis para saber se uma é maior que a outra. Pressione o botão “Step” e veja como o computador avalia o código.

# Variaveis usadas nesse exemplo de declaração se
a = 4
b = 5

# compraração basica
if a < b:
    print("a é menot que b")

if a > b:
    print("a é maior que b")

print("Feito")
Variables:
a=4
b=5
Output:
a é menor que b
Feito

Uma vez que a é menor do que b, a primeira declaração será impressa se ​​esse código for executado. Se as variáveis ​​A e B forem ambos iguais a 4, então nenhuma das duas declarações se if acima irão imprimir nada. O número 4 não é maior do que 4, então a declaração se if irá falhar.

Para mostrar o fluxo de um programa um fluxograma pode ser usado. Muitas pessoas podem ler e seguir um fluxograma, mesmo que nunca tenham tido nenhuma introdução a progromação. Veja como é fácil de entender pela figura 3.1.

fig.flowchart1
Figure 3.1: Flowchart

Este livro faz vistas grossas ao fluxograma, porque é muito chato. Mas se você quiser ser um programador astro, leia mais sobre ele em::
http://en.wikipedia.org/wiki/Flowchart

O primeiro exemplo é para verificar se um valor é maior ou menor. Números iguais não passarão nesse teste. Para checar se um valor é maior que ou igual, o seguinte exemplo mostra isso:

if a <= b:
    print("a é menor ou igual que b")

if a >= b:
    print("a é maior ou igual que b")

Os símbolos <= e >= devem ser usados nesse ordem e sem espaço entre um e outro. Por exemplo, =< não irá funcionar, como também < =.

Quando for escrever comandos faça um teste antes, alguns alunos gostam de usar o símbolo ≤ . Por exemplo:
if a ≤ b:

Este símbolo ≤ atualmente não funciona em um programa. Mais porque a maioria das pessoas não sabem como digitar ele no teclado. (Caso você queira usar ele só por curiosidade, basta manter pressionada a tecla 'alt' enquanto digita 234 no teclado numérico.) Assim, quando você for digitar um código, lembre-se de que é <= e não ≤. muitas pessoas perdem pontos em testes por causa dissso, não seja uma delas.

A próxima sequencia de código verifica se dois itens são iguais ou não. O operador para testar igualdade é == e o operador para testar desigualdade é !=. Aqui estão eles em ação.

# Igual
if a == b:
    print("a é igual a b")

# Desigual
if a != b:
    print("a nã é igual a b")
Saiba quando usar = e ==.

Isso é muito simples de saber quando usar == e =. Use == se você estiver perguntando se algo é igual, use = se você estiver dizendo que algo é igual, ou seja, para atribuir um valor a algo.

Os formas mais comum de confusão sobre os operadores = e == setá demonstrada abaixo:

# Isto é errado
a == 1

# Isso também está errado
if a = 1:
    print("A é um")

Pare! tire um momento para rolar acima e estude cuidadosamente os dois exemplos de código. Ganhe tempo depois, quando estiver programando, tendo a certeza de que você compreendeu muito bem o conceito de quando usar = e ==. Não duvide.

3.2 Indentation

Regras de Tabulação (Recuo). Cada linha sob a declaração se if que aparecem tabuladas, só serão executadas se a declaração for verdadeira:

if a == 1:
    print("Se a for 1, isto será impresso.")
    print("Do contrário irá imprimir isso.")
    print("E isso.")

print("Isto sempre será impresso porque está fora da tabulação.")

Tabulação deve ser do mesmo tamanho. Este código não irá funcionar.

if a == 1:
  print("Recuo de dois espaços.")
    print("Recuo de quatro espaços. Isto irá gerar um erro.")
   print("O computador irá querer que você faça a cabeça dele.")

Uma vez que um comando se if foi finalizado, não é possível retablular para voltar a ele. O teste tem de ser feito novamente.

if a == 1:
    print("Se a for um, isto irá ser impreso.")
    print("e isso também.")

print("Isto sempre será impresso porque está fora do recuo.")
    print("Isto irá gerar um erro. Porque isto foi tabulado?")

3.3 Using And/Or

Cada declaração se (if) pode verificar multiplas condições encadeando declarações com and e or. Eles também são chamados de operadores, tais como + ou -.

# E
if a < b and a < c:
    print("a é menor que b e c")

# Ou não-exclusivo
if a < b or a < c:
    print("a é menor que a ou b (ou ambos)")
Repita você mesmo.

Uma confusão comum é omitir a variável ao checar varias condições encadeadas. O código abaixo não irá funcionar porque o computador nunca irá saber quando nem como checar a variável c. Ele sempre irá assumir que está checando a variável a.

# Isto está errado
if a < b or < c:
    print("a é menor do que b e c")

3.4 Variáveis Booleanas

Python suporta variáveis booleanas, mas o que são variáveis booleans? Variáveis booleanas podem armazenar os valures True (Verdadeiro) ou o valor False (Falso). Algebra Booleana foi desenvolvida por George Boole em 1854. Se ele soubesse o quão importante o seu trabalho se tornaria como a base para a lógica moderna de computadores!

Uma declaração se if precisa de uma expressão True (Verdadeira) ou False (Falsa) para ser avaliada. O que pode parecer estranho é que de fato, aparentemente não é preciso fazer quailquer comparação se uma variável já é expressa como True (Verdadeira) ou False (Falsa).

# Tipo de dado Booleano. Isso é aceitável!
a = True
if a:
    print("a é verdadeiro")

Quando eu era estudante, era pupolar por fazer alguma falsa afirmação esperar três segundos e depois gritar “NÃO!” Well, mesmo que o seu computador pense que é perneta. Se você for fazer isso, você tem de iniciar com o operador not (Não). O Código abaixo usa o operador not (não) para inverter o valor de a entre verdadeiro ou falso.

# Como usar a função not
if not(a):
    print("a é falso")

Porque (Não) not é um operador e não uma função, os parenteses são desenecessários. Isto também é permitido:

# Como usar a função not
if not a:
    print("a é falso")

Também é possível usar variáveis booleansa como os operadores and e or.

a = True
b = False

if a and b:
    print("a e b são verdadeiros")
Qume sabia Verdadeiro/Falso podia dificultar as coisas?

Também é possível assignar a uma variável o resultado de uma comparação. No código abaixo, as variáveis a e b são comparadas. Se forem iguais, c será True (verdadeiro), caso contrário c será False (falso).

a = 3
b = 3
# A próxima linha parece alienigena, mas é permitido.
# c irá ser verdadeiro ou falso, dependendo de
# a e b serem iguais.
c = a == b
# Imprime o valor de c, neste caso, verdadeiro (True)
print(c)
Zero significa Falso (False). Todo o resto é verdadeiro (True).

É possível criar um declaração se if com uma condção diferente de verdadeiro ou falso (True/False). Isso não é muito usado, mas é importante você compreender como o computador processa esses valores quando busca uma solução para os problemas. O comando abaixo é legal e irá imprimir o texto porque os valores dentro da estrutura se if são diferentes de zero:

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

O código abaixo não irá imprimir nada porque o valor da expressão que está sendocomparada na declaração se (if) é zero e é tratada como falso (False). Qualquer outro valor diferente de zero é tratado como verdadeiro (True).

if 0:
	print("Zero")

No código abaixo, o primeiro se if aparentemente funciona. O problema é que ele sempre será dado como verdadeiro mesmo que a variável a não seja igual a b isto é porque b por si mesmo é considerado verdadeiro.

a = "c"
if a == "B" or "b":
	print("a é igual a b. Talvez.")

# Assim é a melhor forma para essa declaração se (if).
if a == "B" or a == "b":
	print("a é igual a b.")

3.5 Senão (Else) e Senão se (Else If)

Abaixo está um código para pegar ma temperatura passada por um usuario e imprimir se está quente ou frio.

temperature = int(input("Informe uma temperatura em Fahrenheit? "))
if temperature > 90:
    print("Está quente lá fora")
print("Feito")

Se o programador quiser um código que seja executado se não estiver quente, ele(a) terá de usar a declaração senão else. Observe como o senão else da declaração é alinhado na mesma tabulação da declaração do se if.

No caso de uma declaração if ... else, um dos dois blocos de código sempre será executado. O primeiro bloco será executado se a declaração se for dada como verdadeira True e o segundo bloco se ela for dada como falsa False.

temperature = int(input("Informe uma temperatura em Fahrenheit? "))
if temperature > 90:
    print("Está quente lá fora!")
else:
    print("Não estpá quente lá fora!")
print("Feito")

É possível encadear várias ses ifem conjunto usando declarações de comandos se ... senão else ... if. Em Python vocẽ pode abreviar isso usando elif.

temperature = int(input("Informe uma temperatura em Fahrenheit? "))
if temperature > 90:
    print("Está quente lá fora!")
elif temperature < 30:
    print("Está frio lá fora!")
else:
    print("Não está quente lá fora!")
print("Feito")
Video: Order of logic in the if statements

In the code below, the program will output “It is hot outside” even if the user types in 120 degrees. Why? How can the code be fixed?

Veja o video, se você quiser ver isso funcionando.

temperature = int(input("Informe uma temperatura em Fahrenheit? "))
if temperature > 90:
    print("Está quente lá fora!")
elif temperature > 110:
    print("Cara, tá dando pra fritar um ovo no asfalto!")
elif temperature < 30:
    print("Está frio lá fora!")
else:
    print("Está ok, pode sair!")
print("Feito")

3.6 Comparando Texto

É possível usar declarações se if para verificar igualdade entre textos.

userName = input("Qual é o seu nome? ")
if userName == "Paul":
    print("Você tem um bonito nome.")
else:
    print("Seu nome está bom.")

O exemplo acima apenas verifica so o usuário informou “Paul”. ele não funciona se o usuário entrar com “paul” ou “PAUL”.

Uma confusão comum é você esquecer das aspas no começo e no final do texto a ser comparado. No exemplo abaixo, o computador irá pensar que Paul é uma variável que deve armazenar um valor. Isso irá gerar um erro, porque ele não tem idéia do que está armazenado na variável Paul.

userName = input("Qual é o seu nome? ")
if userName == Paul: # Isto não funciona porque precisa ter aspas
    print("Você tem um nome legal.")
else:
    print("Seu nome está bem.")

3.6.1 Mais possibilidades com texto

Quando for comparar uma variável com mais de um possível texto, é importante lembrar de sempre incluir a variável em todas as pobrabilidades. Por exemplo:

# Isto não irá funcionar! será sempre verdadeiro (True)
if userName == "Paul" or "Mary":

Para dar certo, tem de usar como segue:

# Isto irá funcionar
if userName == "Paul" or userName == "Mary":

Isto é porque qualquer outro valor diferente de zero é avaliado como verdadeiro True pelo computador. Assim, "Mary" o mesmo que verdadeiro True, para o computador, e por isso irá executar o código dentro da declaração se if.

3.6.2 Comparação de minúsculas

Se o programa precisar fazer uma correspondência, independente da capitalização do texto informado, a melhor forma de fazer isso é converter tudo para minúsculas. Isto pode ser feito usando o comando lower do python.

Aprendendo capitalizar.

O exemplo abaixo irá pegar a entrada do usário e converter tudo para minúscula e depois irá comparar. Importante: Compara novamente usando maiúsculas é inútil. Se a entrada do usuário já foi convertida para minúscula, verificar novamente se é minúscula nunca irá proceder.

userName = input("Qual é o seu nome? ")
if userName.lower() == "paul":
    print("Você tem um bonito nome.")
else:
    print("Seu nome está bem.")

3.7 Example if Statements

Video: If statement examaples

Os exemplos abaixo mostram todos os conceitos vistos até aqui. The on-line video traces through each line of code and explains how it works

In the video I use an integrated development editor (IDE) called Eclipse. The default version of Eclipse doesn't work with Python, but the PyDev version does. The PyDev editor is available for free from:
http://pydev.org/

The editor is complex, but it has many options and can be a powerful environment to work in. Some programmers like using environments such as PyDev that can have so many plug-ins that will do everything but bring you coffee. Some developers prefer a minimalistic environment that doesn't “get in the way.”

# 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 a or b (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 Review

3.8.1 Teste de Multipla Escolha

Click here for a multiple-choice quiz.

3.8.2 Repostas Curtas Escritas

Click here for the chapter worksheet.

3.8.3 Lab

Click here for the chapter lab.


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