Python–Funções IntroduçãoàProgramação SI1 Conteúdo • Funções – Conceitos – Obje<vos – Modularização – Exemplos – Exercícios 2 Funções • Oquesão? • Qualafunçãodeumafunção? 3 Imagine o código 4 Imagine o código Repetição De Código! 5 Qual a utilidade da função? • Evitarepe<çãodecódigo • DeixaocódigoMenor • Maislegível • Maismodularizado 6 Definindo Funções Definição da função inicia com “def” Definindo Funções Definição da função inicia com “def” Nome da função Definindo Funções Definição da função inicia com “def” Nome da função Argumentos Definindo Funções Definição da função inicia com “def” Identação Nome da função Argumentos Definindo Funções Definição da função inicia com “def” Nome da função Argumentos Identação “return” indica o retorno da função Programação Estruturada • Usaoprincípiode“DividirparaConquistar” • Programassãodivididosemsub-programas – Cadasub-programaéchamadopormeiode umiden8ficadoreumalistadeparâmetrosde entrada • Permiteespecificarcomoumproblemapodeser resolvidonogeral • Omesmosub-programapodeserinvocadopara resolverdiversosproblemasdemesmanatureza mascomvaloresespecíficosdiferentes 12 Resultado de Funções • Umafunção<picamentecomputaumou maisvalores • Paraindicarovaloraserdevolvidocomo oresultadodafunção,usa-seocomando return,quetemoformato returnexpressão – ondeaexpressãoéopcionaledesignao valoraserretornado 13 Funções • returnàterminaafunçãoretornando umvalor • OvalordefaultdereturnàNone – SimilaraNULL,void,ounilemoutraslinguagens; • Seafunçãochegaraofimsemouso explícitodoreturn,entãotambémserá retornadoovalorNone 14 Valor de retorno • Toda função em Python retorna algum valor; • Mesmo funções que não possuem a cláusula return. • Funções que não possuem return retornam None. • None é uma constante especial definida na linguagem; • Similar a NULL, void, ou nil em outras linguagens; • É lógicamente equivalente à False; • O interpretador não imprime None. Exemplo 1 16 Exemplo 2 17 Exemplo 3 18 Exercício • Fazerumafunçãoquerecebetrês argumentos,equeretorneoproduto dessestrêsargumentos. • Fazerumafunçãoquerecebacomo parametroumnumerointeiroeretorne ofatorialdessenumero(nãousar recursividade). 19 Abstração • Técnicadeprogramaçãoquenospermite pensarnumproblemaemdiversosníveis – Q u a n d o p e n s a m o s n u m p r o b l e m a m a c r o s c o p i c a m e n t e , n ã o e s t a m o s preocupadoscomdetalhes • Dividirparaconquistar: – Umproblemaédivididoemdiversossubproblemas – Assoluçõesdossub-problemassão combinadasnumasoluçãodoproblemamaior 20 Múltiplos argumentos • Podem receber um número arbitrário de ‘keywords’ Múltiplos argumentos • Podem receber inclusive listas e dicionários. Funções • EmPython,sub-programastêmonomedefunções • Formatogeral: defnome(arg,arg,...arg): comando ... comando • Onde: – nomeéonomedafunção – argssãoespecificaçõesdeargumentosdafunção • Umafunçãopodeter0,1oumaisargumentos – comandoscontêmasinstruçõesaserexecutadasquando afunçãoéinvocada 23 Resultado de Funções • Aoencontrarocomandoreturn,a funçãoterminaimediatamenteeo controledoprogramavoltaaoponto ondeafunçãofoichamada • Seumafunçãochegaaseufimsem nenhumvalorderetornotersido especificado,ovalorderetornoé None 24 Funções x Procedimentos • Procedimento 25 Funções x Procedimentos • Função 26 Argumentos de funções • Argumentos(ouparâmetros)são variáveisquerecebemvaloresiniciaisna chamadadafunção • Essasvariáveissãolocais • Seumafunçãodefinenargumentos,a suachamadadeveincluirvalorespara todoseles – Exceção:argumentoscomvaloresdefault 27 Exemplo >>> def f(x): return x*x >>> print(f(10)) 100 >>> print(x) .... NameError: name 'x' is not defined >>> print(f()) .... TypeError: f() takes exactly 1 argument (0 given) 28 Argumentos default • Épossíveldarvaloresdefaultaargumentos – Seochamadornãoespecificarvalorespara essesargumentos,osdefaultssãousados • Formato: defnomeFuncao (arg1=default1, ..., argN=defaultN) • Seapenasalgunsargumentostêmdefault, essesdevemserosúl4mos 29 Exemplo >>> def f(nome,saudacao="Oi",pontuacao="!!"): return saudacao+","+ nome + pontuacao >>> print(f("Joao”)) Oi,Joao!! >>> print(f("Joao","Parabens")) Parabens,Joao!! >>> print(f("Joao","Ah","...")) Ah,Joao... 30 Argumentos 31 Observações • • Funções podem ser u<lizadas da mesma maneira queoutro<podedadoemPython Elaspodemser: • • • • Argumentosparaoutrasfunções; Valoresderetornodeoutrasfunções; Atribuídasparaoutrasvariáveis; Partesdetuplas,listas,etc 32 Recursividade • Éumprincípiomuitopoderosopara construçãodealgoritmos • Asoluçãodeumproblemaédivididoem – Casossimples: • Sãoaquelesquepodemserresolvidos trivialmente – Casosgerais: • Sãoaquelesquepodemserresolvidos compondosoluçõesdecasosmaissimples 33 Funções Recursivas • Algoritmosrecursivoondeasoluçãodos casosgenéricosrequeremchamadasà própriafunção • Exemplo:SequênciadeFibonacci – Oprimeiroeosegundotermosão0e1, respec<vamente – Oi-ésimotermoéasomado(i-1)-ésimoe o(i-2)-ésimotermo 34 Recursividade Exemplo 35 Funções Recursivas • Exemplo:Fatorial – Fatorial(1)=1 – Fatorial(i)=i*Fatorial(i–1) 36 Variáveis Locais e Globais • Variáveisdefinidasemfunçõessãolocais, istoé,sópodemserusadasnasfunçõesem queforamdefinidas • Variáveisdefinidasforadefunçõessão conhecidascomovariáveisglobais – Emumafunçãopode-seleroconteúdode umavariávelglobal – Paraalterarumavariávelglobal,deve-se declara-lanocorpodafunçãocomglobal 37 Exemplo 38 Escopo • Oescopodeumavariáveléoalcance queelatem,deondeelapodeser acessada. • VariáveisGlobais • VariáveisLocais 39 Escopo 40 Escopo 41 Escopo 42 Escopo • PalavrasReservadas – global–permitequeavariávellocalassim definidaaltereoconteúdodavariável global. – nonlocal–permitequeavariávellocal tenhaescopoumnívelacima. 43 Escopo 44 Escopo 45 Escopo 46 Escopo 47 Escopo 48 Escopo 49 Escopo 50 Escopo 51 Escopo 52 Escopo 53 Módulos • Módulossãoarquivosempython(.py) • Usadosparasepararocódigo dependendodesuafuncionalidade • Facilitaorganizaçãoereuso. 54 Import • 1)importmodulo – Ex: importrandom random.randint(1,10) • 2)frommoduloimportfuncao – Ex: • fromrandomimportrandint • randint(1,10) • 3)frommoduloimport* – Ex: • fromrandomimport* • randint(1,10) • randfloat(1,10) 55 Exemplo arq1.py arq2.py arq3.py 56 AlgumasFunçõesEspeciais! Notação lambda • • • • Funções podem ser definidas sem precisar de rótulos! Isto é muito útil quando você quer passar uma pequena função como argumento para outra função Apenas funções simples (única expressão) podem ser definidas nessa notação. Notação lambda tem um histórico rico em linguagens de programação desde I.A. passando por LISP, haskell… Notação lambda Notação lambda Funções map, reduce e filter • Função map(func, seq) • Função interna que aplica uma função func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados da chamada da função. Funções map, reduce e filter • Função reduce(func, seq) • Função interna que aplica a função sobre o valor corrente retornado pela função (func) junto com o próximo item da lista. Funções map, reduce e filter • Função filter(func, seq) • Função interna que aplica uma função filtro func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados que satisfazem os critérios da função de teste func. Exercícios Dado um conjunto de palavras [‘fita’, ‘Adenilton’, ‘armario’, ‘gaveta’, ‘Bruna’, ‘adentro’, ‘folga’, ‘impressora’]. Montar um filtro que remova todas as palavras que comecem com ‘A’ ou ‘a’. Calcule o quadrado dos números pares entre o intervalo de 0 a 10. EXERCÍCIOS 65 Exercícios 1.FaçaumafunçãochamadasomaImposto.Afunçãopossuidois parâmetros: a)taxaImposto,queéaporcentagemdeimpostosobrevendas b)custo,queéocustodeumitemantesdoimposto. Afunçãoretornaovalordecustoalteradoparaincluiro impostosobrevendas. 66 Exercícios (Arquivos Separados) 2.Façaumafunçãoqueinformeaquan<dadede dígitosdeumdeterminadonúmerointeiro informadopelousuário. 3. Fazerumafunçãoquerecebeumargumento inteiro.Afunçãoretornaovalordecaractere‘P’, seseuargumentoforposi<vo,e‘N’,seseu argumentoforzeroounega<vo. 4.Façaumafunçãoqueretorneoreversodeum númerointeiroinformado.Porexemplo:127-> 721. 67 Exercícios 5.Considereaseguintefórmulaparacalcularo mdc(máximodivisorcomum)dedoisnúmeros inteirosposi<vos: – mdc(a,b)=b,sebdividea(ouseja,a%b==0) – mdc(a,b)=mdc(b,a%b),casocontrário EscrevaumafunçãoemPythonque,dadosdois números,retorneomáximodivisorcomumentre eles.Usarrecursividade. 68 6.Criarumprogramaqueleiaumalistade pessoas,obtenhaosnomesdaspessoasque comecemcom‘a’eimprimaamaiordelas(o maiornome). • Organizeasosmódulosdaseguinteforma. – MóduloPrincipal – Módulosóparamanipularlista – Módulosóparaimprimir. • Aexecuçãodoalgoritmodeveráserfeitaatravés dechamadadefunçõesdosmódulos. Exercícios 7.Façaumprogramaqueconvertadanotaçãode24horaspara anotaçãode12horas.Porexemplo,oprogramadeveconverter 14:25em2:25P.M;6:44em6:44A.M.Aentradaédadaemdois inteiros.Oprogramadevelerváriasentradasechamaruma funçãoparaconvertê-laseemseguidaimprimirasaída. 70 Exercícios 8.Façaumprogramaquepermitaaousuário digitaroseunomeeemseguidaoprograma chamaumafunçãoqueretornaonomedo usuáriodetrásparafrenteu<lizandosomente letrasmaiúsculas.Dica:lembre−sequeao informaronome,ousuáriopodedigitarletras maiúsculasouminúsculas. 71 Exercícios 9.Façaumprogramaquesoliciteadatade nascimento(dd/mm/aaaa)dousuárioe imprimaadatacomonomedomêspor extenso.Oprogramadevechamarumafunção queretornaomêsconver<do.Exemplo: – Entrada-DatadeNascimento:29/10/1973 – Saída-Vocênasceuem29deOutubrode 1973. 72 Bibliografia n Livro“ComopensarcomoumCien<stadeComputação usandoPython”–Capítulos3e13 n hyp://pensarpython.incubadora.fapesp.br/portal n PythonTutorial n hyp://www.python.org/doc/current/tut/tut.html DiveintoPython n hyp://www.diveintopython.org/ PythonBrasil n hyp://www.pythonbrasil.com.br/moin.cgi/ DocumentacaoPython#head5a7ba2746c5191e770383 0e02d0f5328346bcaac n n 73