Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Agenda • Laço for • Condicionais • Expressões Booleanas • Operadores Lógicos • Tabela verdade • Execução condicional • Opositores Lógicos D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Laço for - fluxograma D e p a rt a m e n to d e C iê n c ia d a C o m p u 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: D e p a rt a m e n to d e C iê n c ia d a C o m p u 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: D e p a rt a m e n to d e C iê n c ia d a C o m p u 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! D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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!) D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 =< D e p a rt a m e n to d e C iê n c ia d a C o m p u 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... D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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. D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o Fluxograma da estrutura if com uma cláusula else D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o condição Lista de Comandos 1 Lista de Comandos 2 False True Fluxograma da estrutura if com uma cláusula else D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o condição comando True Omitindo a cláusula else D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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: D e p a rt a m e n to d e C iê n c ia d a C o m p u 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> D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 valorresultante 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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!”) D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u 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 D e p a rt a m e n to d e C iê n c ia d a C o m p u ta ç ã o
Compartilhar