Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
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