Introdução

Agora que você já escreveu alguns programas, provavelmente você deve ter notado que os programas que escrevemos até o momento sempre seguem um único comportamento. Mas e se eu quissese escrever, por exemplo, um programa que leia a idade de uma pessoa e se ela for menor de idade este programa tenha um comportamento, caso contrário o programa tem outro comportamento?

Para escrevermos programas neste formato, ou seja, com mais de um comportamento (ou caminho) diferente , precisaremos utilizar os desvios condicionais. Como o próprio nome já diz, esta ferramenta realiza um desvio no programa dada uma determinada condição. Entretanto antes de vermos os desvios condicionais, precisaremos de alguns conhecimentos básicos.

Iremos começar com variaveis booleanas.

Variaveis booleanas

Uma variavel booleana ou valor booleano é uma variavel que só pode estar dois estados: Verdadeiro ou Falso. Esta variavel sempre vai estar em um destes estados. Outras interpretações que podemos fazer de uma variável booleana é que ela pode estar ligada(verdadeiro) ou desligada(falso). E 1 (ligado) ou 0(desligado).

(parenteses da curiosidade) Sem a lógica booleana provavelmente não estariamos com nossos computadores modernos e logo nem poderiamos aprender a programar. Se você tem interesse em saber mais -> https://pt.wikipedia.org/wiki/Booleano

Em python para criarmos uma variável booleana é só darmos um nome a mesma e atribuir um valor de verdadeiro ou falso a ela. No caso, como o python é baseado em ingles utilizaremos os valores True (verdadeiro) ou False (falso).

Exemplos:

In [1]:
o_prof_luis_eh_legal = True

#observe que ao imprimir a variavel booleana criada acima temos a seguinte saida:
print o_prof_luis_eh_legal
True
In [2]:
temChocolate = False
print "tem chocolate? -> " + str(temChocolate)
temChocolate = True
print "e agora tem chocolate? -> " + str(temChocolate)
tem chocolate? -> False
e agora tem chocolate? -> True

Agora você deve estar se perguntado, mas o que diabos essa coisa ae de ligado/desligado tem a ver com desvios condicionais?

Na realidade tem tudo a ver, pois para criarmos um desvio iremos criar condições que irão nos retornar verdadeiro ou falso. E neste sentido, nosso próximo tópico desta aula é criar algumas condições de desvio no python.

Condições e seus operadores.

Uma condição é como se estivermos criando uma pergunta, vamos perguntar, por exemplo se uma coisa é maior que a outra. Se for verdade, sabemos que determinada "coisa" é maior, caso contrário, sabemos que pode ser igual ou menor.

Antes de escrevermos algumas condições no python, iremos ver os operadores condicionais que podemos uitlizar. Segue a tabela com os que temos no python:

Operador Descirção
== compara se uma coisa é igual a outra coisa
!= compara se uma coisa é diferente a outra coisa
> compara se uma coisa é maior que outra coisa
< compara se uma coisa é menor que outra coisa
>= compara se uma coisa é maior ou igual que outra coisa
<= compara se uma coisa é maior ou igual que outra coisa

Alguns exemplos:

In [3]:
2 == 2
Out[3]:
True
In [4]:
3 == 2
Out[4]:
False
In [5]:
2 != 2
Out[5]:
False
In [6]:
2 != 3
Out[6]:
True
In [7]:
2 > 5
Out[7]:
False
In [8]:
5 > 2
Out[8]:
True
In [9]:
5 > 5
Out[9]:
False
In [10]:
5 >= 5
Out[10]:
True
In [11]:
5 < 3
Out[11]:
False
In [12]:
3 < 5
Out[12]:
True
In [13]:
3 < 3
Out[13]:
False
In [14]:
3 <= 3
Out[14]:
True
In [15]:
A = 33
A > 50
Out[15]:
False
In [16]:
x = 660
y = 4
x <= y
Out[16]:
False
In [17]:
nome1 = "luis"
nome2 = "maria"
nome3 = "maria"

print nome1 == nome2
print nome1 != nome2
print nome2 == nome3
print nome2 != nome3
False
True
True
False

Você notou que as condições sempre retornam True ou False? Bacana não? Observe que uma condição sempre vai precisar de dois valores e ela deve sempre estar entre os valores.

Já sabemos criar condições, agora podemos criar os desvios \o/

Desvios

Para criar um desvio iremos utilizar o comando if do python. O if significa "se" em portugues, a ideia é a seguinte: se alguma coisa é verdade, realize a seguinte sequencia de comandos. Iremos utilizar a seguinte forma para nossos comandos: if Valor_Booleano:

Você notou que sempre passamos um valor booleando para o if? Mas o que é este valor booleano? Pode ser uma variavel booleana ou uma condição, lembra que toda condição vai nos dar um valor True ou False? Que é a mesma coisa que ter uma variável booleana.

Vamos aos exemplos:

In [18]:
if True:
    print "O if empre executa quando o valor booleano passado para ele é verdade"
O if empre executa quando o valor booleano passado para ele é verdade
In [19]:
if False:
    print "se o valor passado para o if for falso, ele não executa nada"
In [20]:
if 5 < 10:
    print "como 5 é menor que 10, este print vai ser executado"
    
como 5 é menor que 10, este print vai ser executado

Em resumo, o if só vai executar os códigos que estão abaixo dele caso o valor booleano passado para ele seja verdade. Mas como o if sabe quais comandos vão ser executados caso ele receba um valor verdadeiro?

O if, e vários outros comandos que iremos ver possuem um bloco de código que pertence a ele. No python, para assossiarmos um bloco de código a um if ou a algum outro comando utilizamos o alinhamento. Como você pode ver nos exemplos anteriores, todos os comandos estão um pouco mais a direita do if. Todos os comandos que estiverem neste alinamento vão estar no bloco do if e só serão exetados caso o if receba uma condição verdadeira.

Exemplos:

In [21]:
A = 10
B = 50
if A != B:
    print "este print será executado pois A é diferente de B"
    print "este outro print também sera executado pois esta dentro do bloco do if"
    C = A + B #esta soma só sera calculada caso A seja diferente de B, pois ele esta dentro do bloco do if.
    print "mostrando o calculo de C: " + str(C)
print "este print sera executado independentemente do resultado do IF, pois ele esta fora do bloco do if, i.e., não esta no mesmo alinhamento"
este print será executado pois A é diferente de B
este outro print também sera executado pois esta dentro do bloco do if
mostrando o calculo de C: 60
este print sera executado independentemente do resultado do IF, pois ele esta fora do bloco do if, i.e., não esta no mesmo alinhamento

Agora observe a saida do mesmo código só que quando a condição passada para o if é falsa:

In [22]:
A = 50
B = 50
if A != B:
    print "este print será executado pois A é diferente de B"
    print "este outro print também sera executado pois esta dentro do bloco do if"
    C = A + B #esta soma só sera calculada caso A seja diferente de B, pois ele esta dentro do bloco do if.
    print "mostrando o calculo de C: " + str(C)
print "este print sera executado independentemente do resultado do IF, pois ele esta fora do bloco do if, i.e., não esta no mesmo alinhamento"
este print sera executado independentemente do resultado do IF, pois ele esta fora do bloco do if, i.e., não esta no mesmo alinhamento

Você notou que apenas o print que esta fora do if foi executado? Isto se da pois o valor passado ao IF era falso.

Mas e se eu quiser executar outros comandos quando a condição passada ao é falsa?

O comando else (se não)

Como já vimos, o if só executa seu bloco de código quando o valor passado para ele é verdade. Entretanto algumas vezes queremos executar um bloco de código quando este valor não é verdadeiro, ou seja, falso. Para isto encadeamos ao if um comando chamado else. O else em portugues seria se não, ou seja, caso a condição passada ao if seja falsa executamos o bloco de código do else.

Exemplo:

In [23]:
idade = 19

if idade < 18:
    print "menor de idade"
else:
    print "maior de idade"
maior de idade

Como podemos ver no exemplo anterior, como a variavel idade tem um valor maior ou igual a 18 a condição passada ao if vai dar falso e portanto caiu no bloco do else.

Assim como o bloco do if, o bloco do else pode executar inúmeros comandos desde que todos estejam no mesmo alinhamento mais a direita.

Exemplo:

In [24]:
idade = int(raw_input("Digite sua idade"))

if idade < 18:
    print "menor de idade"
    print "que tipo de bebida desejas ?"
    print "coca cola"
    print "guarana"
else:
    print "maior de idade"
    print "que tipo de bebida desejas ?"
    print "coca cola"
    print "guarana"
    print "cerveja"
    print "vodka"

bebida = raw_input("Qual bebida você escolheu? ")
print "bebida escolhida: " + bebida
Digite sua idade10
menor de idade
que tipo de bebida desejas ?
coca cola
guarana
Qual bebida você escolheu? coca cola
bebida escolhida: coca cola

Neste exemplo o menu é modificado dependendo da idade da pessoa. E como podemos verificar são executados vários comandos dentro do bloco do if e do else. Rode este exemplo, veja se informando diferentes idades ele mostra realmente os menus corretamente.

Então vimos que podemos utilizar o else caso o valor passado ao if seja falso, com isso conseguimos tratar o caso negativo e criar dois caminhos diferentes no nosso programa.

Entretanto, como podemos ver, o else não possui uma condição, e sempre que o if não for verdadeiro vai cair no bloco do else. Dependendo do caso isso pode ser ruim, por exemplo, imagine que queremos escrever uma lógica onde temos três condições diferentes para executarmos. Uma forma de resolver isso é utilizar o elif.

elif (else if, se não se)

Muitas vezes precisaremos encadear várias condições de teste em um programa, para isso podemos juntar o comando else com o if. No python temos um comando que faz justamente isso para nós o elif (else + if). com ele podemos passar mais uma condição e realizar vários testes em sequencia. O elif segue a mesma ideia do if e do else. Caso a condição passada para ele seja verdadeira e executa seu bloco de código baseado no alinhamento.

Exemplo:

In [25]:
idade = 30;
if idade >= 65:
    print "passagem gratuida"
elif idade >= 18:
    print "passagem inteira"
else:
    print "meia passagem"
passagem inteira

Você notou que agora temos 3 faixas de testes? Podemos utilizar o elif para criar inúmeros testes e assim criar diferentes desvios para nossos programas.

Mais um exemplo:

In [26]:
x = 44

if x > 100:
    print "x maior que 100"
elif x > 50:
    print "x maior que 50 e menor ou igual que 100"
elif x > 0:
    print "x maior que 0 e menor ou igual que 50"
else:
    print "x menor ou igual que 0"
x maior que 0 e menor ou igual que 50

Como podemos ver nos exemplos, podemos ecadear inumeros elifs para criar vários casos testes e assim criar diferentes desvios para nossos programas. Entretato, como você pode notar nos exemplos, cada desvio possui apenas uma condição e dependendo do caso precisaremos testar duas ou mais coisas para seguir um caminho de desvio. Para realizar isso precisameros utilizar os operadores E e OU

Operadores and e or (operadores E e OU)

Muitas vezes vamos querer combinar mais de um valor booleano para passar para nossos ifs ou elifs, para isso iremos utilizar os operadores and e or. Estes operadores combinam dois valores booleanos em um único, é importante ressaltar que cada um destes operadores combina os dois valores de formas diferentes. Vamos começar com o operador and.

Operador ana

O operador and combina dois valores booleanos, e apenas se ambos os valores forem veradeiros ele devolve verdadeiro, caso um dos valores seja falso ou ambos a saida vai ser sempre falsa. No python usamos este operador escrevendo and sendo que temos que passar um valor booleano na esquerda e outro na direita.

Exemplos:

In [27]:
True and True
Out[27]:
True
In [28]:
True and False
Out[28]:
False
In [29]:
False and True
Out[29]:
False
In [30]:
False and False
Out[30]:
False
In [31]:
10 > 5 and (44 + 6) == 50
Out[31]:
True
In [32]:
a = 50
b = 55
chato = True

print a > b and chato
print a < b and chato
False
True

Como podemos observar, o operador and só devolve verdade se ambos os valores que passarmos para ele forem verdade. Mas e se quisemos que desse verdade se ao menos um dos valores for verdade ? Para isso temos o operador or

Operador or

O operador or, assim como o and, recebe dois valores booleanos e devolve um valor como saida. Entretanto, o operador or vai devolver verdadeiro sempre que um dos valores for verdadeiro ou ambos. Portanto só teremos false com o operador or caso ambos os valoreses sejam false.

Exemplos:

In [33]:
True or True
Out[33]:
True
In [34]:
True or False
Out[34]:
True
In [35]:
False or True
Out[35]:
True
In [36]:
False or False
Out[36]:
False
In [37]:
10 > 5 or (44 + 6) == 50
Out[37]:
True
In [38]:
10 < 5 or (44 + 6) == 50
Out[38]:
True
In [39]:
10 < 5 or (44 + 6) != 50
Out[39]:
False
In [40]:
a = 50
b = 55
chato = True

print a > b or chato
print a < b or chato
True
True

Como vimos a saida do or e do and sempre vai ser um valor booleano e portanto podemos utilziar eles em um if ou elif

Exemplos:

In [41]:
idade = 40

if idade >= 18 and idade < 30:
    print "faixa etaria entre 18 e 29"
elif idade >=30 and idade < 65:
    print "faixa etaria entre 30 e 65"
elif idade >= 65:
    print "faixa de 65 ou mais"
elif idade >=0 and idade < 18:
    print "faixa dos menores de idade"
elif idade > 150:
    print "idade invalida pois passa dos 150 anos"
else:
    print "idade invalida pois é negativa..."
    
faixa etaria entre 30 e 65
In [42]:
caractere = "r"

if caractere == "r" or caractere == "f":
    print "caso seja r ou f cai aqui"
elif caractere == 'x' or caractere == 'y':
    print "caso seja x ou y cai aqui"
else:
    print "outro caractere que não é r ou f ou x ou y"
caso seja r ou f cai aqui

Como podemos ver nos exemplos podemos usar o and ou or para realizar várias combinações diferentes.

operador not

Algumas vezes poderemos inverter um valor booleano, ou seja, de true transformar em false ou o contrário. para isso temos o operador not.

exemplos:

In [43]:
not 10 > 5
Out[43]:
False
In [44]:
not 5 > 10
Out[44]:
True
In [45]:
chato = True
not chato
Out[45]:
False
In [46]:
chato = False
idade = 5

if idade > 18 or not chato:
    print "idade tem que ser maior que 18 ou não chato"
else:
    print "alguma coisa..."
idade tem que ser maior que 18 ou não chato

Este é o conteudo que precisamos para construirmos nossos programas com desvios. Agora vamos aos exercícios. =)

In [ ]: