Python 3.
x
Estrutura de Decisão
Departamento de Ciência da Computação
if then else
Estrutura de Repetição
for
Introdução à Ciência da Computação
Prof. Edison Ishikawa 1
Agenda
Departamento de Ciência da Computação
• Condicionais
• Expressões Booleanas
• Operadores Lógicos
• Tabela verdade
• Execução condicional
• Opositores Lógicos
• Laço for
2
Condicionais
Departamento de Ciência da Computação
• Programas de computador ficam realmente
interessantes quando testamos condições e mudamos
seu comportamento dependendo do resultados dos
testes!
• É disto que vamos tratar a seguir.
• Valores booleanos e expressões
Matemático Britânico
que inventou a
Álgebra Booleana
3
Valores Booleanos
• Um valor Booleano ou é verdadeiro ou é falso.
Departamento de Ciência da Computação
• Álgebra Booleana
• Algumas regras sobre como raciocinar para combinar estes
valores
• Em Python, os dois valores Booleanos são:
• True
• False
• (Note as letras maiúsculas que devem ser exatamente iguais
ao mostrado acima!)
Exemplos
>>> type(True)
<class ‘bool’)
>>>type(true)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module> 4
type(true)
NameError: name 'true' is not defined
Expressão Booleana
Departamento de Ciência da Computação
• É uma expressão que faz um cálculo para produzir um
resultado que é um valor Booleano
• Por exemplo, o operador == testa se dois valores são
iguais
Exemplo
>>> 5 == (3 + 2)
True
>>> 5 == 6
False
>>> j = “hel”
>>> j + “lo” == “hello”
True 5
Operadores de Comparação
Departamento de Ciência da Computação
• O operador == é um dos seis operadores de
comparação que produzem um resultado bool
x == y # resulta True se x é igual a y
x != y # resulta True se x não é igual a y
x > y # resulta True se x é maior que y
x < y # resulta True se x é menor que y
x >= y # resulta True se x é maior ou igual a y
x <= y # resulta True se x é menor ou igual a y
• Obs:
• O operador = é diferente do operador == 6
• Não existe => ou =<
Variáveis booleanas
Departamento de Ciência da Computação
• Como qualquer outro tipo, valores Booleanos podem ser
atribuídos a uma variável, impressos, etc...
Exemplos:
>>> idade = 19
>>> maior_de_idade_para_tirar_carteira_de_motorista = idade >= 18
>>>print(maior_de_idade_para_tirar_carteira_de_motorista)
>>>True
>>>type(maior_de_idade_para_tirar_carteira_de_motorista)
<class ‘bool’>
7
Operadores Lógicos
Departamento de Ciência da Computação
• Existem três operadores lógicos:
• and ( e em português)
• or (ou em português)
• not (não em português)
• Permitem construir expressões Booleanas mais complexas
• A semântica (significado) destes operadores é similar ao seu
significado em Inglês (Português)
• x > 0 and x < 10
• x está no intervalo (0, 10)
• n%2 == 0 or n%3 == 0
• n é divisível por 2 ou por 3
• not (x > y)
• É verdadeiro (True) se x > y e falso (False) se x é menor ou igual a 8
y
Tabela Verdade
Departamento de Ciência da Computação
• É uma pequena tabela que permite listar todas as
possíveis entradas e dar os resultados para a operação
lógica
• Como os operadores and e or só tem dois operandos,
só existem quatro linhas em uma tabela verdade que
descreve a semântica do and.
a b a and b
False False False
False True False
True False False
9
True True True
Tabela Verdade or
Departamento de Ciência da Computação
Abreviando
a b a or b
F F F
F T T
T F T
T T T
Usando números binários
a b a or b
0 0 0
0 1 1
1 0 1
1 1 1 10
Tabela verdade not
Departamento de Ciência da Computação
a not a
F T
T F
a not a
0 1
1 0
11
Simplificando expressões
booleanas
Departamento de Ciência da Computação
• Um conjunto de regras para simplificar e rearranjar
expressões é chamado de álgebra
Exemplos para operador and
x and False == False
False and x == False
y and x == x and y
x and True == x
True and x == x
x and x == x
Exemplos para operador or
x or False == x
False or x == x
y or x == x or y 12
x or True == True
True or x == True
x or x == x
Simplificando expressões
booleanas
Departamento de Ciência da Computação
• Dois operadores not se cancelam
Exemplo
not ( not x ) == x
13
Execução Condicional
Departamento de Ciência da Computação
• Para se escrever um programa útil, quase
sempre precisamos ser capazes de verificar
alguma condição e em função disto,
modificar o comportamento do programa.
• Estruturas (Comandos) condicionais nos
dão esta capacidade
• A estrutura mais simples é o comando if
14
Fluxograma da estrutura if
com uma cláusula else
Departamento de Ciência da Computação
False True
condição
Lista de Lista de
Comandos 1 Comandos 2
15
Fluxograma da estrutura if
com uma cláusula else
Departamento de Ciência da Computação
Exemplo:
if x % 2 == 0:
print(x, “ é par.”)
print(“Você sabia que o 2 é o único número par que é primo?”)
else:
print(x, “ é ímpar.”)
print(“Você sabia que a multiplicação de dois números ímpares “ +
“ sempre resulta em um número ímpar?”)
16
Fluxograma da estrutura if
com uma cláusula else
Departamento de Ciência da Computação
Sintaxe
if <EXPRESSÃO BOOLEANA> :
<COMANDO_1> # Executado se a condição é verdadeira
else:
<COMANDO_2> # Executado se a condição é falsa
17
Omitindo a cláusula else
Departamento de Ciência da Computação
True
condição
comando
18
Omitindo a cláusula else
Departamento de Ciência da Computação
Exemplo
if x < 0 :
print(“O número negativo “, x, “não é válido aqui!”)
x = 42
print(“Por isso, decidi usar o número 42. “)
print(“ A raiz quadrada de “, x, “ é “, [Link](x))
Tem que usar suíte ou
import math bloco de
comandos
19
else não é um comando, é uma cláusula
Condicionais encadeadas
Departamento de Ciência da Computação
Exemplo:
if x > y:
<BLOCO_DE_COMANDOS_A>
elif x < y:
<BLOCO_DE_COMANDOS_B>
else: # x == y
<BLOCO_DE_COMANDOS_C>
Como fica o
fluxograma?
20
Condicionais encadeadas
Departamento de Ciência da Computação
x<y
Bloco de
comandos A
x>y
Bloco de
comandos B
Bloco de
comandos C
21
Condicionais encadeadas
Departamento de Ciência da Computação
• Não existe limite para o encadeamento
Exemplo
if opcao == “a”:
funcao_1( )
elif opcao == “b”:
funcao_2( )
elif opcao == “c”:
funcao_3( )
elif opcao == “d”:
funcao_4( )
elif opcao == “e”:
funcao_5( )
else:
print(“Opção inválida!”) 22
Condicionais aninhadas
• Uma estrutura condicional pode ser aninhada dentro de
Departamento de Ciência da Computação
outra estrutura condicional
• É o mesmo que composição de estruturas
• Ou seja, os exemplos anteriores podem ser escritos
como:
x<y
Bloco de
comandos A
x>y
Bloco de Bloco de
comandos C comandos B
23
Condicionais aninhadas
Departamento de Ciência da Computação
Exemplo
if x < y:
<BLOCO_DE_COMANDOS_A>
else:
if x > y:
<BLOCO_DE_COMANDOS_B>
else: # x == y
<BLOCO_DE_COMANDOS_C>
Embora a indentação de comandos torne o aninhamento das estruturas
aparente, condicionais aninhadas se tornam rapidamente muito difíceis
de se entender.
24
Em geral, é uma boa ideia evitá-las.
Condicionais aninhadas
Departamento de Ciência da Computação
• Para se evitar o aninhamento de estruturas condicionais,
podemos usar operadores lógicos
Exemplo aninhado
if 0 < x: # Suponha x um número inteiro
if x < 10:
print(“x é um inteiro positivo de um dígito.”)
Exemplo simplificado
if 0 < x and x < 10:
print(“x é um inteiro positivo de um dígito.”)
Exemplo: uma terceira opção
if 0 < x < 10: 25
print(“x é um inteiro positivo de um dígito.”)
Exercício
• Uma loja de informática está promovendo a venda de 2 produtos:
Departamento de Ciência da Computação
• notebooks a 1500 reais cada, e ipads a 1000 reais cada.
• A loja está fazendo uma promoção.
• se o cliente comprar 3 ou mais unidades, entre notebooks e ipads, a loja desconta
500 reais.
• sobre o valor resultante depois da primeira promoção, a loja dá um desconto ou
acréscimo que depende da forma de pagamento:
• Se o cliente pagar a vista: o desconto será de 10%
• Se o cliente pagar a prazo: o acréscimo será de 8%
• Faça um programa que leia três números inteiros a respeito de uma compra, nessa
ordem:
• a quantidade de notebooks, a quantidade de ipads e um valor que indica como será
efetuado o pagamento (0 para pagamento a vista e 1 para pagamento a prazo)
• O programa deve escrever na tela os seguintes valores reais com duas casas
decimais:
• a) valor da compra antes da aplicação da promoção;
• b) valor da compra depois da aplicação da promoção;
• c) valor depois da aplicação da forma de pagamento;
26
• Exemplo de entrada: 2 2 0
• Exemplo de saída: 5000.00 4500.00 4050.00
Lógicos opostos
Departamento de Ciência da Computação
• Cada um dos seis operadores lógicos tem um oposto
operador oposto lógico
== !=
!= ==
< >=
<= >
> <=
>= <
• Entender os opostos lógicos evita o uso do operador not
• Operadores not são frequentemente difíceis de se
entender no código do programa, e a nossa intenção é 27
escrever um código claro e limpo
Lógicos opostos
Departamento de Ciência da Computação
Exemplo com not
if not ( idade >= 18 ):
print(“Oi, você é muito jovem para tirar uma carteira de motorista!”)
Exemplo mais claro
if idade < 18 :
print(“Oi, você é muito jovem para tirar uma carteira de motorista!”)
28
Lei de Morgan
Departamento de Ciência da Computação
• Existem duas leis de simplificação poderosas que
ajudam muito quando lidamos com expressões
Booleanas complicadas
(not (x and y)) == ( (not x) or (not y) )
(not (x or y)) == ( (not x) and (not y) )
29
Exemplo: Média Aritmética
Departamento de Ciência da Computação
• Enunciado
• Leia duas duplas de números inteiros, calcule a média
aritmética de cada dupla e imprima o resultado.
• Entrada
• 2 números inteiros por linha
• 2 linhas
• Saída
• A média aritmética, um por linha
Exemplo de entrada Exemplo de saída
11 1.0
12 1.5
00 0.0 30
02 1.0
Exemplo
Departamento de Ciência da Computação
Exemplo
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
11
12
1.0
1.5
31
Exemplo: Média Aritmética
Departamento de Ciência da Computação
• Enunciado
• Leia 3 duplas de números inteiros, calcule a média
aritmética de cada dupla e imprima o resultado.
• Entrada
• 2 números inteiros por linha
• 3 linhas
• Saída
• A média aritmética, um por linha
Exemplo de entrada Exemplo de saída
11 1.0
12 1.5
00 0.0 32
Exemplo
Exemplo
Departamento de Ciência da Computação
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
11
12
00
33
1.0
1.5
0.0
Laço for
Departamento de Ciência da Computação
• Perceberam que no código várias linhas se
repetem?
• Ao invés de ficarmos repetindo o código
existe um comando Python para repetir um
trecho de código um determinado número
de vezes
• O controle de fluxo para repetir o código
pode ser visualizado por meio de um
fluxograma
34
Laço for - fluxograma
Departamento de Ciência da Computação
Todos os itens
SIM
da sequência
tiveram a sua
vez?
NÃO
Atribua à variável do loop o
próximo item
Execute todos os comandos
que estão no corpo do loop
35
Laço for
Departamento de Ciência da Computação
• Para se calcular a média de 3 duplas de números basta repetir
3 vezes – ler a dupla, calcular a média, imprimir a média
• As 12 linhas se transformam em apenas 5 linhas
Exemplo
for i in [1, 2, 3]:
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
• Obs:
• Embora economizar algumas linhas de código seja
conveniente, neste exemplo a economia foi pouca
• O mais importante é que aprendemos um “padrão de
repetição” de comandos e reorganizamos o programa para 36
repetir este padrão!
Laço for
Departamento de Ciência da Computação
• Obs:
• Identificar estes padrões de repetição e de alguma forma
adaptar o nosso programa em volta destes padrões é uma
habilidade vital do pensamento computacional
• Os valores [1, 2, 3] foram fornecidos para que o corpo do
loop seja executado 3 vezes
• Podemos usar qualquer valor, mas estes são os
convencionalmente usados
• Como eles são muito usados em qualquer programa,
Python nos dá um objeto que já vem embutido no
interpretador (built-in) chamado range:
Exemplo
for i in range(3):
#execute o corpo do laço for 3 vezes, com i valendo, na sequência 37
# começando por i=0, i=1 e terminando com i=2
Laço for
Departamento de Ciência da Computação
• Obs:
• Cientistas da computação gostam de começar a contar a
partir do zero e não do 1!
• range fornece uma sequência de valores à variável do loop
for.
• Começa com 0 (zero) e, neste caso não inclui o 4 (quatro)
• Como não usamos a variável i do loop for no corpo do loop,
podemos substituí-la por _, embora isto não seja importante
para o fluxo do programa, é um bom estilo
• Logo, para repetir alguma coisa 3 vezes, um bom
programador Python escreveria:
for _ in range(3):
a, b = input().split() 38
a, b = int(a), int(b)
media = (a+b)/2
print(media)
Laço for
Departamento de Ciência da Computação
• Obs:
• Mas e se quisermos usar a variável do loop for no corpo do
programa?
• Sem problemas!
Exemplo:
for i in [“média1”, “média2”, “média3”]:
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(i+”=“, media)
média1= 1.0
média2= 1.5
média3= 0.0
39
Bibliografia
Departamento de Ciência da Computação
• How to Think Like a Computer Scientist: Learning
with Python 3 – Documentation - Release 3rd Edition
• Peter Wentworth, Jeffrey Elkner,Allen B. Downey and
Chris Meyers
• Apr 26, 2017
40