Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Funções com Argumentos

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui.



No último post sobre funções em Python eu mostrei o básico do básico com as funções. De uma certa forma aquela abordagem é errada e deve ser evitada. Ainda não irei explicar exatamente o porque pois isso depende de um conceito de variáveis locais e globais que eu estarei explicando após ensinar os argumentos das funções.


Funções com Argumentos



As funções se tornam praticamente inúteis se não forem utilizados os argumentos. Mas antes de mais nada, o que é um argumento?

Um argumento é uma variável passada para um função. Dessa forma a função se utiliza desse argumento para trabalhar. Vamos ver um exemplo:

Código PHP:
>>> def ola(nome):
...     print 
'Ola',nome
...
>>>
>>> 
ola('joão')
Ola joão
>>> ola('Maria')
Ola Maria
>>> ola('José')
Ola José
>>> 
Ao definir a função 'ola' eu informei que seria passado um argumento chamado 'nome' e que a função deveria imprimir a palavra 'ola' seguida pelo conteúdo da variável nome. Para quem já trabalhou com outras linguagens como C, C++ ou Java, isso parece algo absurdo pois não foi especificado o tipo da variável. Como vimos a muito tmepo atrás, o Python possui tipagem dinâmica. Com isso não é necessário informar o tipo da variável no argumento.

Esse comportamento pode ser vantajoso ou não, depende do desenvolvedor. O desenvolver Python geralmente é um programador disciplinado, ou seja, suas funções são concisas e bem definidas evitando problemas com o tipo do argumento. A baixo um exemplo de algo que devemos ter cuidado para não ocorrer:

Código PHP:
>>> def ola(nome):
...     print 
'Ola',nome
...
>>>
>>> 
ola('joão')
Ola joão
>>> ola(12)
Ola 12
>>> ola([1,2,3])
Ola [123]
>>> 
Por enquanto não se preocupem com esses problemas, eu irei mostrar uma forma de evitar esse tipo de ocorrências num futuro próximo. Por enquanto vamos ver alguns exemplo de funções.

Vamos fazer uma função que busque uma determinada letra dentro de uma frase:
Código PHP:
def conta_letra(letra_esperadafrase):
    
contador 0
    
for letra in frase:
        if 
letra == letra_esperada:
            
contador += 1
    
print 'Foram encontradas',contador,'ocorrências da letra',letra_esperada

conta_letra
('a''este e um teste')
conta_letra('e''este e um teste')
conta_letra('m''mais uma vez')
conta_letra('s''mais uma vez'
Execução do código:
Código :
Foram encontradas 0 ocorrências da letra a
Foram encontradas 5 ocorrências da letra e
Foram encontradas 2 ocorrências da letra m
Foram encontradas 1 ocorrências da letra s
Como podemos ver, uma função pode ter um ou mais argumentos. Nesse exemplo nossa função possui dois argumentos, uma letra e uma frase. A função percorre todas as letras da frase informada e conta quantas vezes a letra esperada aparece na frase. No final ela imprime o resultado da contagem.

Criar a função dessa forma é uma grande vantagem pois se podemos contar qualquer letra em qualquer frase. Se criássemos uma função que conta a letra 'a' e precisássemos de uma função que conta as ocorrências da letra e, teríamos que uma nova função. Isso é algo que deve ser planejado pelo programador. Devemos sempre tentar criar funções que sejam adaptáveis e reutilizáveis.


Exercícios:
1. Faça uma programa que utilize uma função para calcular a média dos alunos do dicionário a baixo:
Código :
notas = {'aluno1':[5,6,5], 'aluno2':[7,8,6], 'aluno3':[6,6,8], 'aluno4':[5,9,8], 'aluno5':[5,6,3], 'aluno6':[6,6,6]}
Dica: Crie uma função que tenha como argumento um lista de notas.


2. Faça uma função que calcule o quadrado de uma dado número. Exemplo:
Código :
>>> quadrado(2)
4
>>> quadrado(4)
16
>>> quadrado(3)
9
3. Faça uma função que encontre o maior número de uma determinada lista. Teste-a com as listas a baixo:
Código :
l1 = [1, 2, 3]
l2 = [2,7,5,3]
l3 = [7,3,9,5]
l4 = [0, 1, -1]
l5 = [-4, -2, -6]

Atualizado 01-09-2010 em 09:16 por Magnun

Categorias
Artigos , Artigos , Cursos , Curso de Python

Comentários

  1. Avatar de PEdroArthurJEdi
    def media(k): return map(lambda x: (x[0], sum(x[1])/len(x[1])), k.iteritems())
    def quad(n): return n*n
    def maximum(k): return max(k)
  2. Avatar de Magnun
    Ae Pedro! Mandou bem, tudo em uma linha...
    Mas como o curso é ainda é introdutório, vou refazer utilizando loops e outras coisas!

    Obrigado pelo comentário! É bom saber que alguém ainda lê meus posts :)
    Até mais...
  3. Avatar de neiesc
    @Magnun opá mais outro lê seus posts =)
    Meus parabéns pois poucos tem tanta paciência de ensinar etapa por etapa como aquela história da tartaruga e o coelho.

    @PEdroArthurJEdi programação funcional interessante

    Bom segue minha resolução tentei utilizar oque foi ensinado no curso.

    1.
    Código PHP:
    notas = {'aluno1':[5,6,5], 'aluno2':[7,8,6], 'aluno3':[6,6,8], 'aluno4':[5,9,8], 'aluno5':[5,6,3], 'aluno6':[6,6,6]}

    def calcular_media(lista_num,quant_num):
        
    media 0
        
    for num in lista_num:
            
    media += num
        media 
    float(media)/quant_num
        
    print media

    for aluno in notas:
        print 
    'O aluno',aluno,'possui a média',
        
    calcular_media(notas[aluno],3
    2.
    Código PHP:
    def quadrado(num):
        print 
    num num

    quadrado
    (2)
    quadrado(4)
    quadrado(3
    3.
    Código PHP:
    def maior_num(lista_num):
        
    maior lista_num[0]
        for 
    posica in lista_num:
            if 
    posicao maior:
                
    maior posicao
        
    print 'O numero maior é ',maior,'na lista',lista_num

    l1 
    = [123]
    l2 = [2753]
    l3 = [7395]
    l4 = [01, -1]
    l5 = [-4, -2, -6]

    maior_num(l1)
    maior_num(l2)
    maior_num(l3)
    maior_num(l4)
    maior_num(l5
    Atualizado 22-06-2010 em 18:52 por neiesc
  4. Avatar de Magnun
    Ae neiesc, mandou muito bem! Só um pequeno detalhe, que na verdade foi erro meu. A função quadrática, eu expliquei ela corretamente mas coloquei os valores esperados errados. Na verdade era pra retornar:

    >>> quadrado(2)
    4
    >>> quadrado(4)
    16
    >>> quadrado(3)
    9

    Já corrigi, desculpe-me pelos erros! Obrigado pelos elogios cara, estou somente tentando angariar alguns desenvolvedores para formar um grupo de desenvolvimento de softwares livres.

    Como não tenho encontrado muitos desenvolvedores com conhecimento e que estajam dispostos a isso, resolvi "criar" desenvolvedores e assim formar uma nova comunidade.

    Até mais...
  5. Avatar de cleoson
    Olá Magnun,

    Abaixo minhas soluções para os exercícios:
    Exercício 1:
    Neste exercício utilizei a função sum() que outro colega(salvo engano, o @neiesc) utilizou em outro exercício:
    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    notas = {'aluno1':[5,6,5], 'aluno2':[7,8,6], 'aluno3':[6,6,8], 'aluno4':[5,9,8], 'aluno5':[5,6,3], 'aluno6':[6,6,6]}
     
    def media(nota_aluno):
        print float(sum(nota_aluno)) / len(nota_aluno)
     
    for aluno in notas:
        print 'A média do aluno',aluno,'é:',
        media(notas[aluno])
    Exercício 2:
    Código :
    def quadrado(num):
         print num ** 2
     
    quadrado(2)
    4
    quadrado(5)
    25
    quadrado(8)
    64
    Exercício 3:
    Neste exercício eu usei o mesmo código que já havia usado para organizar uma lista, só que agora eu coloco o maior número na primeira posição da lista e depois o imprimo:
    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    l1 = [1, 2, 3]
    l2 = [2,7,5,3]
    l3 = [7,3,9,5]
    l4 = [0, 1, -1]
    l5 = [-4, -2, -6]
     
    def maior_numero(lista):
        for i in range(len(lista)-1):
            for j in range(1,len(lista)):
                if j >= i:
                    if lista[i] <= lista[j]:
                        lista[i],lista[j] = lista[j],lista[i]
        print lista[0]
     
    for listas in (l1,l2,l3,l4,l5):
        print 'O maior número da lista',listas,'é:',
        maior_numero(listas)

    Acho que é isso.


    Um abraço!
  6. Avatar de Magnun
    Mandou bem cleoson, embora na última solução seja um pouco de desperdício computacional organizar a lista somente para descobrir o maior número. Mas mesmo assim as resoluções valeram!
    Até mais...
  7. Avatar de cleoson
    Oi Magnun,
    Você tem razão. Pensei mais um pouquinho, e fiz o seguinte código. Acho que ficou mais otimizado. Veja:
    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    l1 = [1, 2 ,3]
    l2 = [2,7,5,3]
    l3 = [7,3,9,5]
    l4 = [0, 1, -1]
    l5 = [-4, -2, -6]
     
    def maior_numero(lista):
        teste = lista[0]
        for i in range(1,len(lista)):
            if teste < lista[i]:
                teste = lista[i]
        print teste
     
    for listas in (l1,l2,l3,l4,l5):
        print 'O maior número da lista',listas,'é:',
        maior_numero(listas)

    Um abraço!
  8. Avatar de Magnun
    Ah! Agora mandou muito bem, 100% de otimização!
    Até mais...
  9. Avatar de fabraga
    Usando o que foi ensinado até agora, acho que meu código saiu o mais simples possível:


    Código PHP:
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    def media_alunos(alunos):
        
    m_alunos 0.00
        
    for aluno,notas in alunos.items(): 
            
    media 0.00 
            
    for nota in notas:
                
    media += nota
            media 
    /= len(notas)
            
    m_alunos += media
        
    return(m_alunos len(alunos))

    notas = {'aluno1':[5,6,5], 'aluno2':[7,8,6], 'aluno3':[6,6,8], 'aluno4':[5,9,8], 'aluno5':[5,6,3], 'aluno6':[6,6,6]}

    print(
    "\nMédia de todos os alunos: %.2f"%media_alunos(notas))

    def quadrado(num): return (num num)

    print(
    "O quadrado é",quadrado(int(input("\nInforme um número: "))))

    def maior(nums):
        
    nums[0]
        for 
    n in nums:
            if 
    n>m:
                
    n
        
    return (m)

    print(
    "O maior número da lista é",maior(list(input("\nInforme alguns números separados por vírgula: ")))) 
    Saída:
    Código PHP:
    Python 3.2 (r32:88445Feb 20 201121:30:00) [MSC v.1500 64 bit (AMD64)] on win32
    Type 
    "copyright""credits" or "license()" for more information.
    >>> ================================ 
    RESTART ================================
    >>> 

    Média de todos os alunos6.17

    Informe um número
    7
    O quadrado é 49

    Informe alguns números separados por vírgula
    4,0,3
    O maior número da lista é 4
    >>> 

+ Enviar Comentário