Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Nesta aula. . . 1 Decisões em Python 2 Funções lógicas 3 Recursão 4 Iteração Iteração indefinida 5 Ciclo for ou while? João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Valores lógicos: booleanos Tipo do Python para guardar os valores lógicos, verdadeiro e falso: booleano (George Bool, matemático inglês) Valores lógicos podem ter apenas dois valores: True e False (não esquecer a maiúscula) >>> print(True) True >>> print(type(True)) <class ’bool’> bool é mais um tipo, como int, float, . . . expressões de comparação (==, >, . . . ) resultam num valor lógico >>> 5 == 5 True >>> 5 == 6 False conversão entre valores numéricos e lógicos: 0 → False valores diferentes de 0 → True >>> bool(100) True >>> bool(0) False João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Operações lógicas Há três operadores lógicos: and, or, not; Semântica: semelhante ao significado em inglês; conjunção disjunção negação P and Q P or Q not P Resultado verdadeiro se P e Q forem ambos verdadeiros verdadeiro se pelo menos um de P e Q for verdadeiro verdadeiro se P for falso João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Precedência dos operadores primeiro as operações aritméticas, depois as de comparação, por fim as lógicas Nível 7 (alto) 6 5 4 3 2 1 (baixo) Categoria exponenciação multiplicação adição relação negação conjunção disjunção João Pedro PEDROSO Operadores ** * / // % + == != <= >= not and or Introdução à Programação - minor > < Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Execução condicional Condições em cadeia: if cond 1: instr 1 elif cond 2: instr 2 . . . elif cond N-1: instr N-1 else: instr N João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Funções lógicas funções podem retornar valores lógicos (bool); isso permite “esconder” testes complicados dentro de funções def isDivisible(x, y): if x % y == 0: result = True else: result = False return result nome de funções lógicas devem dar a entender o tipo bool do resultado forma mais sintética, tirando partido da condição no if resultar num valor lógico: def isDivisible(x, y): return x % y == 0 utilização: if isDivisible(x, y): ... # do something ... else: ... # do something else ... João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Exemplo de recursão: factorial O factorial de um número natural n é n × n − 1 × . . . × 2 × 1: Definição recursiva: 0! = 1 n! = n × (n − 1)! João Pedro PEDROSO (para n > 0) Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Função recursiva em Python def factorial(n): if n==0: return 1 else: r = factorial(n-1) return n*r João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Iteração e recursão Computadores são frequentemente utilizados para automatizar tarefas repetitivas. Repetição de uma sequência de instruções: iteração. Recorde: Iteração repetir operações um número variável de vezes Recursão resolver um problema usando a solução de um problema semelhante (mas de menor dimensão) Iteração em Python: ciclos for, ciclos while. João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Ciclos for processam todos os elementos de uma lista cada item é atribuído, por ordem, à variável do ciclo, e o corpo do ciclo é executado for f in ["Joe", "Amy", "Brad", "Angelina", "Zuki", "Thandi"]: invitation = "Hi " + f + ". Please come to my party!" print(invitation) iteração e o padrão acumulador: def sumTo(aBound): theSum = 0 for aNumber in range(1, aBound+1): theSum = theSum + aNumber return theSum print(sumTo(4)) print(sumTo(1000)) João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Acumuladores def square(x): total = 0 for counter in range(x): total = total + x return total o que faz? este padrão é muito usado em programação 1 2 inicializar a variável antes de iniciar o ciclo; a cada iteração, atualizar a variável toSquare = 10 squareResult = square(toSquare) print("The result of", toSquare, "squared is", squareResult) João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Ciclos while while fornece um mecanismo de iteração mais geral tal como if, utiliza uma expressão lógica para controlar o fluxo de execução o corpo do while será repetido enquanto essa expressão for verdadeira criamos a variável do ciclo, que é: 1 2 inicializada a 1 incrementada a cada iteração def sumTo(aBound): theSum = 0 aNumber = 1 while aNumber <= aBound: theSum = theSum + aNumber aNumber = aNumber + 1 return theSum print(sumTo(4)) print(sumTo(1000)) João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Ciclos while: fluxo da execução 1 2 3 avaliar a condição se o resultado for False, sair da instrução while e continuar na instrução seguinte; se o resultado for True, executar as instruções do corpo do while e voltar ao passo 1; ciclo é “fechado” do passo 3 para o passo 1 se a condição for falsa da primeira vez, as instruções do ciclo não são executadas alguma variável deve ser modificada no ciclo, para que termine ciclo infinito: itera para sempre! João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Ciclos for e while ciclos for iteram sobre uma sequencia de valores, e terminam sempre (iteração definida) ciclos while dependem da condição para terminar; por vezes é difícil saber quando terminam iteração indefinida João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Iteração indefinida Sequência de Collatz: 1 começar com um dado valor inteiro n; 2 o termo seguinte é: 3 1 se n par: dividir por dois; 2 se n ímpar: multiplicar por três e somar um; a sequência termina quando n for 1. João Pedro PEDROSO def seq3np1(n): while n != 1: print(n) if n % 2 == 0: n = n // 2 else: n = n * 3 + 1 print(n) >>> seq3np1(3) 3 10 5 16 8 4 2 1 Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Análise até agora, não se provou nem que a sequência termina nem o contrário; com computadores foram testados valores de n muito elevados; ainda não se encontrou nenhum para o qual a sequência não terminasse; se não terminasse quando se atinge um: ciclo 1,4,2,1,4,2,1,. . . poderá haver outros ciclos infinitos, que não se conhecem. . . João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Ciclo for ou while? Ciclo for quando se conhece o número máximo de vezes que se irá iterar; iteração definida. Ciclo while quando se vai iterar até que determinada condição se verifique; iteração indefinida. João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Noções estudadas esta semana argumento valor passado a uma função, quando é chamada. Esse valor é atribuído ao parâmetro correspondente. O argumento pode ser o resultado de uma expressão (que é executada antes da função ser chamada) bloco grupo de instruções consecutivas, com a mesma indentação cabeçalho primeira parte de uma instrução composta; começa com uma palavra reservada do Python, que define o tipo de instrução, e termina com dois pontos (:) chamada a uma função instrução que executa a função; consiste no nome da função seguido de uma lista de argumentos entre parêntesis ciclos for e while; composição de funções utilização do resultado de uma função como input para outra condição expressão lógica numa instrução de execução condicional, que determina qual dos ramos será seguido condições em cadeia conjunto de ramos, em situações em que há mais do que dois fluxos de execução possíveis; em Python: if ... elif ... else João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Noções estudadas esta semana corpo segunda parte de uma instrução composta, que consiste numa sequência de instruções (bloco) todas indentadas o mesmo número de espaços relativamente ao cabeçalho dessa instrução (o standard do Python é 4 espaços) definição de função instrução que cria uma nova função, especificando o seu nome, parâmetros, e as instruções que executa docstring primeira linha do corpo de uma função (veremos mais tarde outras situações), se for uma string; essa string é depois utilizada para documentar a função, através do seu atributo __doc__ duração (de variáveis) período entre a criação e a extinção de uma variável expressão lógica expressão cujo resultado é verdadeiro ou falso fluxo da execução ordem pela qual as instruções são executadas num programa João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Noções estudadas esta semana função sequência de instruções à qual se deu um nome, e que executa uma operação útil; pode ter zero ou mais parâmetros, e pode produzir um resultado ou não função com resultado função que devolve um valor quando é chamada função lógica função que retorna um valor lógico função sem resultado função que não devolve nenhum valor quando é chamada imbricar nesting estrutura de programação dentro de uma outra (ex: if dentro de outro if) import instrução que permite que funções e variáveis definidas noutro módulo Python sejam utilizadas num programa João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Noções estudadas esta semana instrução composta instrução que consiste em duas partes, o cabeçalho e o corpo instrução condicional instrução que controla o fluxo de execução, dependendo do resultado de uma expressão lógica (a condição) operador lógico operador que combina expressões lógicas (and or not) operadores relacionais (ou de comparação) um dos operadores que comparam dois valores: == != <= >= > < parâmetro nome utilizado dentro de uma função para designar um valor que lhe é passado como argumento ramo um dos caminhos no fluxo de execução condicional rearranjar reescrever (limpar) o código de um programa para o tornar mais compreensível (tipicamente depois de o programa já estar a funcionar) valor lógico verdadeiro (True) ou falso (False); em Python, tipo bool variável local variável definida dentro de uma função; pode ser usada apenas dentro dessa função, sendo destruida quando a função termina João Pedro PEDROSO Introdução à Programação - minor Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Próxima aula Algoritmos João Pedro PEDROSO Introdução à Programação - minor