Baixe o app para aproveitar ainda mais
Prévia do material em texto
27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 1/12 Programação RAD Aula 9: Funções INTRODUÇÃO Nas aulas anteriores, apresentamos o tema orientação a objetos e aprendemos a de�nir métodos em cada classe, os quais, em termos de sintaxe, são bem parecidos com funções. Mas, até agora, nossos exemplos foram simples e baseados no IDLE praticamente. É hora de criarmos programas maiores e mais funcionais em arquivos separados. A ideia é aprofundar o conhecimento sobre as particularidades da linguagem Python, a �m de desenvolver programas mais extensos e executá-los fora do IDLE. Nesta aula, vamos estudar um pouco mais as funções e aprender a inseri-las nesses programas. OBJETIVOS 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 2/12 Descrever funções em Python. Criar programas maiores e estruturados nessa linguagem. 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 3/12 FUNÇÕES Vamos começar nossa aula tratando de alguns detalhes referentes às funções que podem fazer a diferença em termos de produtividade. A função é criada com a palavra reservada def: Veja o exemplo: def funcao1(): pass Esperamos que toda função retorne algum valor. Para isso, usamos a palavra-chave return. O exemplo a seguir implementa uma função mais completa, embora ainda simples. Observe: 1: def temp_F(temp_C): 2: valor = (temp_C*9/5)+32 3: return valor O return não é obrigatório. Como mencionamos, um valor de retorno de função é esperado, mas, nem sempre, é obrigatório. Em algumas linguagens de programação, quando isso ocorre, a função é chamada de procedure (procedimento). Veja um exemplo: Como você percebeu, o resultado visual é o mesmo, e não usamos return. Agora, vamos analisar o código: def temp_F(temp_C): valor = (temp_C*9/5)+32 return valor Com return Sem return 1: def temp_F(temp_C): 2: valor = (temp_C*9/5)+32 3: return valor x 1: def temp_F(temp_C=25): 2: valor = (temp_C*9/5)+32 3: print("°C=",temp_C," °F=",valor) 4: 5: temp_F() 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 4/12 A função do exemplo possui como nome “temp_F” e tem como objetivo converter uma temperatura que é recebida no argumento temp_C. O resultado da conversão é processado pela fórmula de conversão de temperatura na linha 2, e o resultado é armazenado na variável valor. A função devolve para o chamador o valor na linha 3 por meio da palavra return. Toda vez que encontrar essa palavra, a função será interrompida, e o resultado, devolvido para o chamador. Vamos incrementar o exemplo colocando uma parte para interação com o usuário: 1: def temp_F(temp_C): 2: valor = (temp_C*9/5)+32 3: return valor 4: 5: temp = input("Digite a temperatura em graus Celsius: ") 6: temp = float(temp) 7: temp_F = print("O valor da temperatura em graus Fahrenheit é:", temp_F(temp)) As linhas 5 a 7 criam uma forma de o usuário digitar a temperatura em Celsius e, em seguida, de vê-la convertida para Fahrenheit. Também é possível retornar mais de um valor (= objeto): podemos implementar funções que não retornem apenas um valor de tipo primitivo, mas também arrays, listas, objetos etc. Vamos analisar um exemplo simples, em que modi�camos a função de conversão de temperatura e acrescentamos a conversão para a escala Kelvin ou absoluta: 1: def temperatura(C): 2: F = (C*9/5)+32 3: K = C + 273 4: return(F,K) 5: 6: (tempF,tempK) = temperatura(25) 7: print("°C=25, °F=",tempF) 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 5/12 8: print("°C=25, K=",tempK) Como você observou, é possível receber mais do que um retorno de funções. Nesse caso, usamos tipos simples da linguagem, que podem ser listas, objetos etc. PARÂMETROS No exemplo anterior, vimos que a função temp_F possui um argumento apenas. Em Pyhon, é possível estabelecer um valor padrão para o argumento. Veja o exemplo: 1: def temp_F(temp_C=25): 2: valor = (temp_C*9/5)+32 3: return valor 4: 5: print("Chamando a função com valor padrão. °C=25, °F=",temp_F()) Agora, na linha 1, há um valor padrão (opcional) que funciona quando o chamador da função não passa nenhum parâmetro, como ocorre na linha 5. Observe que temp_F() não tem parâmetros, e, dentro da função, o argumento temp_C tem valor 25 como padrão. ESCOPO E TEMPO DE VIDA DE VARIÁVEIS O escopo de uma variável é a parte de um programa na qual a variável é reconhecida. Os parâmetros e as variáveis de�nidas dentro de uma função não são visíveis fora dela. Isso é o que chamamos de escopo local. Já o tempo de vida de uma variável é o período no qual a variável existe na memória. Dentro de uma função, esse período compreende o intervalo desde o momento no qual é chamada até o �m de sua execução. Quando há retorno da função, as variáveis são destruídas. Portanto, a função não consegue “lembrar” o valor de uma variável após sua execução. Veja os exemplos a seguir. Exemplo 1 Código O que será impresso 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 6/12 1: def funcao(): 2: print(x) 3: 4: x = "Teste" 5: funcao() Teste A variável x foi de�nida fora da função e terá o mesmo valor dentro dela. Logo, seu valor não será modi�cado. Exemplo 2 Código O que será impresso 1: def funcao(): 2: x = "Olá mundo!" 3: print(x) 4 5: x = "Teste" 6: funcao() 7: print(x) Olá mundo! Teste Há uma variável fora e dentro da função com o mesmo nome (x). Nesse caso, embora os nomes sejam iguais, o “x” de dentro da função é outra variável, e seu escopo reside na função. Já o “x” de fora tem o escopo fora da função. Trata-se de variável diferente, com outro endereço de memória e apenas o mesmo nome da variável interna da função de�nida na linha 2. Exemplo 3 Código O que será impresso 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 7/12 1: def funcao(): 2: print(x) 3: x = "Olá mundo!" 4: print(x) 5: 6: x = "Teste" 7: funcao() 8: print(x) Olá mundo! Erro! UnboundLocalError: local variable 'x' referenced before assignment Encontramos um problema: a variável x interna da função foi de�nida após o print da linha 2. Entretanto, na função (linha 3), outra variável x foi criada. A linguagem Python processa isso, veri�cando que, no interior da função, há uma variável x dentro do escopo. Mas, antes, apareceu certo comando com uma variável x diferente. Disso resulta o erro. Exemplo 4 Código O que será impresso def funcao(): 2: global x 3: print(x) 4: x = "Olá mundo!" 5: print(x) 6: 7: x = "Teste" 8: funcao() 9: print(x) Teste Olá mundo! Olá mundo! Corrigimos o erro, acrescentando a palavra-chave global na linha 2. Isso indica que o x referido na linha 3 vem de fora da função e é uma variável global. Na linha 4, a variável x tem o valor modi�cado, o qual é levado para fora da função. É possível perceber isso na linha 9: agora, seu valor é “Olá mundo!”, e, antes da chamada, era “Teste”. Em algumas situações, você pode usar esse recurso nos programas. 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 8/12 UM PROGRAMA, VÁRIAS FUNÇÕES Até agora, em todas as aulas, apresentamos exemplos curtos, simplese diretos apenas para mostrar a praticidade de um comando ou recurso, mas não vimos um programa maior e mais “real”. Em Python, é possível criar interfaces grá�cas. Por enquanto, vamos nos concentrar em um exemplo mais simples, mas que pode inspirar várias ideias mais bem elaboradas. Criaremos uma pequena calculadora. O programa conterá um menu no qual o usuário escolherá a operação que deseja fazer e repetirá até escolher sair do programa. De�niremos algumas funções que serão chamadas ao longo do programa. Não usaremos orientação a objetos para facilitar o aprendizado do tema. Para isso, mostraremos o programa completo (glossário) e explicaremos cada parte. Diante das limitações do programa, na linha 1, o import é o diferencial: esse comando lê uma biblioteca do sistema – denominada “os” (operational system) –, que contém a função os.system(‘cls’). Esta limpa a tela para deixar o programa mais organizado na hora da execução. Criando o Menu 01: import os 02: 03: def menu(): 04: escolha = 0 05: while (escolha!=5): 06: print("1- Adição") 07: print("2- Subtração") 08: print("3- Multiplicação") 09: print("4- Divisão") 10: print("5- Sair") 11: escolha = int(input("Faça sua escolha:")) 12: 13: if escolha == 1: 14: (op1,op2)=entrada_dados() 15: resultado = adicao(op1,op2) 16: elif escolha == 2: 17: (op1,op2)=entrada_dados() 18: resultado = subtracao(op1,op2) 19: elif escolha == 3: https://stecine.azureedge.net/webaula/estacio/gon116/galeria/aula9/docs/a09_doc1.pdf 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 9/12 Uma calculadora pode ser implementada de várias maneiras: há funções que chamam funções, múltiplo retorno, passagem de parâmetros e até mesmo um import – comando que não estudamos até o momento. O programa conta com um menu simples, o qual �cará repetindo enquanto o usuário não digitar a tecla “5”. Não tratamos de outros tipos de entradas, como letras ou símbolos especiais. Isso �ca para você como atividade, ok? Ao teclar “1”, “2”, “3” ou “4”, o menu chama a função entrada_dados() – comum para todas as operações –, que guarda dois operandos, os quais serão usados nas operações posteriores, escolhidas pelo usuário de acordo com a entrada no menu. Em cada operação, a função recebe os operandos lidos pela entrada_dados, pois faz parte do escopo da função externa. Após a operação, o retorno é feito pela variável resultado – mostrado no menu depois da chamada da função da operação respectiva. 20: (op1,op2)=entrada_dados() 21: resultado = multiplicacao(op1,op2) 22: elif escolha == 4: 23: (op1,op2)=entrada_dados() 24: resultado = divisao(op1,op2) 25: elif escolha==5: 26: cai_fora() 27: 28: print("O resultado é: ",resultado) Entrada de dados 30: def entrada_dados(): 31: operando1 = �oat(input("Operando 1: ")) 32: operando2 = �oat(input("Operando 2: ")) 33: return (operando1,operando2) Adição 35: def adicao(op1,op2): 36: os.system('cls') 37: print("*** ADIÇÃO ***") 38: resultado = op1+op2 39: return resultado Subtração 41: def subtracao(op1,op2): 42: os.system('cls') 43: print("*** SUBTRAÇÃO ***") 44: resultado = op1-op2 45: return resultado Multiplicação 47: def multiplicacao(op1,op2): 48: os.system('cls') 49: print("*** MULTIPLICAÇÃO ***") 50: resultado = op1*op2 51: return resultado 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 10/12 Para sair da calculadora, chamaremos a função cai_fora. Como você percebeu, criamos várias funções nas linhas: • 3 (menu); • 30 (entrada_dados); • 35 (adicao); • 41 (subtracao); • 47 (multiplicacao); • 53 (divisao); • 59 (cai_fora). AGORA É SUA VEZ! Como você deve imaginar, existem muito mais assuntos relacionados com funções que não exploramos aqui. Mas demos o pontapé inicial para você procurar outros recursos na internet e continuar a estudar o tema. Lembre-se de digitar o programa da calculadora e vá mais além: crie uma própria. Bom trabalho! ATIVIDADES 1. Escreva o que será impresso pelos programas a seguir: 1: x = 1 2: def funcao(): 3: global x 4: print('x = ',x) 5: x = 2 6: print('x global =',x) 7: 8: funcao() 9: print('Valor de x=',x) Resposta Correta Divisão 53: def divisao(op1,op2): 54: os.system('cls') 55: print("*** DIVISÃO ***") 56: resultado = op1/op2 57: return resultado Saindo do programa 59: def cai_fora(): 60: print("\n Tchau! \n") 61: quit() 62: 63: menu() 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 11/12 1: i = 1 2: def funcao(): 3: global i 4: for j in (1, 2, 3): 5: i += 1 6: 7: funcao() 8: print(i) Resposta Correta 2. Analise o programa a seguir: def maior(a, b): if a > b: print(a, 'é o maior') elif a == b: print(a, 'é igual a', b) else: print(b, 'é o maior') maior(3, 4) Qual será sua saída? a) 3 b) 4 c) 4 é o maior d) N.R.A. Justi�cativa 3. Se o return for omitido em uma função, o que acontecerá? a) A função retornará 0. b) A função não retornará nada. c) A função retornar um número qualquer. d) A função dará erro, pois é obrigatório ter return. Justi�cativa 4. Veja um exemplo de funções recursivas em Python: def Foo(x): if (x==1): 27/06/2022 12:33 Disciplina Portal https://estudante.estacio.br/disciplinas/estacio_7100507/temas/9/conteudos/1 12/12 return 1 else: return x+Foo(x-1) print(Foo(4)) Qual será sua saída? a) 10 b) 24 c) 7 d) 1 Justi�cativa Glossário
Compartilhar