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.
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:
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
temChocolate = False
print "tem chocolate? -> " + str(temChocolate)
temChocolate = True
print "e agora tem chocolate? -> " + str(temChocolate)
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.
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:
2 == 2
3 == 2
2 != 2
2 != 3
2 > 5
5 > 2
5 > 5
5 >= 5
5 < 3
3 < 5
3 < 3
3 <= 3
A = 33
A > 50
x = 660
y = 4
x <= y
nome1 = "luis"
nome2 = "maria"
nome3 = "maria"
print nome1 == nome2
print nome1 != nome2
print nome2 == nome3
print nome2 != nome3
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/
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:
if True:
print "O if empre executa quando o valor booleano passado para ele é verdade"
if False:
print "se o valor passado para o if for falso, ele não executa nada"
if 5 < 10:
print "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:
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"
Agora observe a saida do mesmo código só que quando a condição passada para o if é falsa:
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"
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?
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:
idade = 19
if idade < 18:
print "menor de idade"
else:
print "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:
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
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.
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:
idade = 30;
if idade >= 65:
print "passagem gratuida"
elif idade >= 18:
print "passagem inteira"
else:
print "meia passagem"
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:
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"
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
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.
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:
True and True
True and False
False and True
False and False
10 > 5 and (44 + 6) == 50
a = 50
b = 55
chato = True
print a > b and chato
print a < b and chato
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
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:
True or True
True or False
False or True
False or False
10 > 5 or (44 + 6) == 50
10 < 5 or (44 + 6) == 50
10 < 5 or (44 + 6) != 50
a = 50
b = 55
chato = True
print a > b or chato
print a < b or chato
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:
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..."
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"
Como podemos ver nos exemplos podemos usar o and ou or para realizar várias combinações diferentes.
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:
not 10 > 5
not 5 > 10
chato = True
not chato
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..."
Este é o conteudo que precisamos para construirmos nossos programas com desvios. Agora vamos aos exercícios. =)