Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Nesta aula. . . 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) 1 Decisões em Python 2 Funções lógicas 3 Recursão bool é mais um tipo, como int, float, . . . expressões de comparação (==, >, . . . ) resultam num valor lógico 4 Iteração Iteração indefinida >>> 5 == 5 True >>> 5 == 6 False 5 Ciclo for ou while? >>> print(True) True >>> print(type(True)) <class ’bool’> 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 João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Operações lógicas Precedência dos operadores Há três operadores lógicos: and, or, not; Semântica: semelhante ao significado em inglês; conjunção disjunção negação Introdução à Programação - minor 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 P and Q P or Q not P João Pedro PEDROSO 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) Introdução à Programação - minor Categoria exponenciação multiplicação adição relação negação conjunção disjunção João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? 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 Funções lógicas funções podem retornar valores lógicos (bool); isso permite “esconder” testes complicados dentro de funções Condições em cadeia: def isDivisible(x, y): if x % y == 0: result = True else: result = False return result if cond 1: instr 1 elif cond 2: instr 2 . . . 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: elif cond N-1: instr N-1 else: instr N 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? 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 Função recursiva em Python 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 João Pedro PEDROSO (para n > 0) Introdução à Programação - minor 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? Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Iteração e recursão Iteração indefinida Ciclos for processam todos os elementos de uma lista Computadores são frequentemente utilizados para automatizar tarefas repetitivas. 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) 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 e o padrão acumulador: def sumTo(aBound): theSum = 0 for aNumber in range(1, aBound+1): theSum = theSum + aNumber return theSum Iteração em Python: ciclos for, ciclos while. print(sumTo(4)) print(sumTo(1000)) João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Introdução à Programação - minor João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Acumuladores Introdução à Programação - minor Iteração indefinida Ciclos while while fornece um mecanismo de iteração mais geral 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) 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 Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Introdução à Programação - minor 2 3 Iteração indefinida 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 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! Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Introdução à Programação - minor Ciclos for e while 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; João Pedro PEDROSO 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 João Pedro PEDROSO Introdução à Programação - minor João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Iteração indefinida Iteração indefinida Introdução à Programação - minor Iteração indefinida Análise 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 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? Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Ciclo for ou while? Noções estudadas esta semana 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 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 Introdução à Programação - minor João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? 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 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 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 fluxo da execução ordem pela qual as instruções são executadas num programa João Pedro PEDROSO Introdução à Programação - minor João Pedro PEDROSO Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Decisões em Python Funções lógicas Recursão Iteração Ciclo for ou while? Noções estudadas esta semana Próxima aula 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 Introdução à Programação - minor Algoritmos João Pedro PEDROSO Introdução à Programação - minor