39
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 Departamento de Ciência da Computação

Python 3.x Estrutura de Repetição for Estrutura de Decisão

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 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

Page 2: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 3: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 4: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 5: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 6: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 7: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 8: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 9: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 10: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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)

Page 11: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 12: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 13: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 14: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 15: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 16: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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’>

Page 17: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 18: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 19: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 20: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 21: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 22: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 23: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 24: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Page 25: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

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?”)

Page 26: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

Sintaxe

if <EXPRESSÃO BOOLEANA> :

<COMANDO_1> # Executado se a condição é verdadeira

else:

<COMANDO_2> # Executado se a condição é falsa

Page 27: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 28: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 29: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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?

Page 30: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 31: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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!”)

Page 32: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 33: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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.

Page 34: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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.”)

Page 35: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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

Page 36: Python 3.x Estrutura de Repetição for Estrutura de Decisã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

== !=

!= ==

< >=

<= >

> <=

>= <

Page 37: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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!”)

Page 38: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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) )

Page 39: Python 3.x Estrutura de Repetição for Estrutura de Decisão

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