Python 3.x Estrutura de Repetição for Estrutura de Decisão ...
Transcript of Python 3.x Estrutura de Repetição for Estrutura de Decisão ...
Python 3.x
Estrutura de Repetição
for
Estrutura de Decisão
if then else Introdução à Ciência da Computação
Prof. Edison Ishikawa
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Agenda
• Laço for
• Condicionais
• Expressões Booleanas
• Operadores Lógicos
• Tabela verdade
• Execução condicional
• Opositores Lógicos
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo: Média Aritmética
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo de entrada Exemplo de saída
1 1
1 2
1.0
1.5
0 0
0 2
0.0
1.0
Exemplo 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)
1 1
1 2
1.0
1.5
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo: Média Aritmética
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo de entrada Exemplo de saída
1 1
1 2
0 0
1.0
1.5
0.0
Exemplo 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)
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
1 1
1 2
0 0
1.0
1.5
0.0
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Laço for
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Laço for - fluxograma
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Todos os itens
da sequência
tiveram a sua
vez?
Atribua à variável do loop o
próximo item
Execute todos os comandos
que estão no corpo do loop
SIM
NÃO
Laço for • 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:
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo
for i in range(3):
#execute o corpo do laço for 3 vezes, com i valendo, na sequência
# começando por i=0, i=1 e terminando com i=2
Laço for • 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:
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
for _ in range(3):
a, b = input().split()
a, b = int(a), int(b)
media = (a+b)/2
print(media)
Laço for
• Obs:
• Mas e se quisermos usar a variável do loop for no corpo do
programa?
• Sem problemas!
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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
Condicionais
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Matemático Britânico
que inventou a
Álgebra Booleana
Valores Booleanos • Um valor Booleano ou é verdadeiro ou é falso.
• Á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!)
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplos
>>> type(True)
<class ‘bool’)
>>>type(true)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
type(true)
NameError: name 'true' is not defined
Expressão Booleana
• É 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo
>>> 5 == (3 + 2)
True
>>> 5 == 6
False
>>> j = “hel”
>>> j + “lo” == “hello”
True
Operadores de Comparação
• O operador == é um dos seis operadores de comparação que produzem um resultado bool
• Obs:
• O operador = é diferente do operador ==
• Não existe => ou =<
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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
Variáveis boolenas
• Como qualquer outro tipo, valores Booleanos podem ser
atribuídos a uma variável, impressos, etc...
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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’>
Operadores Lógicos
• 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
y
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Tabela Verdade
• É 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.
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
a b a and b
False False False
False True False
True False False
True True True
Tabela Verdade or
a b a or b
F F F
F T T
T F T
T T T
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
a b a or b
0 0 0
0 1 1
1 0 1
1 1 1
Abreviando
Usando números binários
Tabela verdade not
a not a
F T
T F
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
a not a
0 1
1 0
Simplificando expressões
booleanas • Um conjunto de regras para simplificar e rearranjar
expressões é chamado de álgebra
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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
x or True == True
True or x == True
x or x == x
Simplificando expressões
booleanas • Dois operadores not se cancelam
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo
not ( not x ) == x
Execução Condicional
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Fluxograma da estrutura if
com uma cláusula else
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
condição
Lista de
Comandos 1
Lista de
Comandos 2
False True
Fluxograma da estrutura if
com uma cláusula else
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
taçã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?”)
Fluxograma da estrutura if
com uma cláusula else
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Sintaxe
if <EXPRESSÃO BOOLEANA> :
<COMANDO_1> # Executado se a condição é verdadeira
else:
<COMANDO_2> # Executado se a condição é falsa
Omitindo a cláusula else
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
condição
comando
True
Omitindo a cláusula else
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
taçã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, “ é “, math.sqrt(x))
Tem que usar
import math
suíte ou
bloco de
comandos
else não é um comando, é uma cláusula
Condicionais encadeadas
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
taçã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?
Condicionais encadeadas
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
x < y
x > y
Bloco de
comandos C
Bloco de
comandos A
Bloco de
comandos B
Condicionais encadeadas
• Não existe limite para o encadeamento
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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!”)
Condicionais aninhadas • Uma estrutura condicional pode ser aninhada dentro de
outra estrutura condicional
• É o mesmo que composição de estruturas
• Ou seja, os exemplos anteriores podem ser escritos
como:
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
x < y
x > y
Bloco de
comandos C
Bloco de
comandos A
Bloco de
comandos B
Condicionais aninhadas
Exemplo
if x < y:
<BLOCO_DE_COMANDOS_A>
else:
if x > y:
<BLOCO_DE_COMANDOS_B>
else: # x == y
<BLOCO_DE_COMANDOS_C>
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Embora a indentação de comandos torne o aninhamento das estruturas
aparente, condicionais aninhadas se tornam rapidamente muito difíceis
de se entender.
Em geral, é uma boa ideia evitá-las.
Condicionais aninhadas • Para se evitar o aninhamento de estruturas condicionais,
podemos usar operadores lógicos
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
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:
print(“x é um inteiro positivo de um dígito.”)
Exercício • Uma loja de informática está promovendo a venda de 2 produtos:
• 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%
• Faca 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;
• Exemplo de entrada: 2 3 0
• Exemplo de saída: 5000.00 4500.00 4050.00
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Lógicos opostos
• Cada um dos seis operadores lógicos tem um oposto
• 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 é escrever um código claro e limpo
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
operador oposto lógico
== !=
!= ==
< >=
<= >
> <=
>= <
Lógicos opostos
Exemplo com not
if not ( idade >= 18 ):
print(“Oi, você é muito jovem para tirar uma carteira de motorista!”)
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
Exemplo mais claro
if idade < 18 :
print(“Oi, você é muito jovem para tirar uma carteira de motorista!”)
Lei de Morgan
• Existem duas leis de simplificação poderosas que
ajudam muito quando lidamos com expressões
Booleanas complicadas
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação
(not (x and y)) == ( (not x) or (not y) )
(not (x or y)) == ( (not x) and (not y) )
Bibliografia
• 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
Dep
art
am
en
to d
e C
iên
cia
da C
om
pu
tação