[Curso de Python] Correção - Funções com Argumentos
24 de Junho de 2010, 0:00 - sem comentários aindaAntes de prosseguir leia os artigos anteriores aqui.
Dessa vez dois colegas apresentaram soluções (PEdroArthurJEdi e o neiesc). Cada um abordou o problema de uma forma. Como ainda estamos estudando o básico do Python, vou adotar uma solução mais simplista e que se utiliza somente das noções básicas de programação.
1. Faça uma programa que utilize uma função para calcular a média dos alunos do dicionário a baixo:
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.
Código da solução:
Saída do programa:Código PHP:
def calcula_media(notas):
total = 0
tamanho = 0
for nota in notas:
total += nota
tamanho += 1
total = float(total)/tamanho
print 'Media:', total
for aluno in notas:
print 'Aluno',aluno,
calcula_media(notas[aluno])
2. Faça uma função que calcule o quadrado de uma dado número. Exemplo:Código:Aluno aluno1 Media: 5.33333333333 Aluno aluno3 Media: 6.66666666667 Aluno aluno2 Media: 7.0 Aluno aluno5 Media: 4.66666666667 Aluno aluno4 Media: 7.33333333333 Aluno aluno6 Media: 6.0
Código da solução: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:>>> def quadrado(numero): ... print numero**2 ... >>> quadrado(2) 4 >>> quadrado(4) 16 >>> quadrado(5) 25 >>> quadrado(3) 9 >>>
Código da solução:Código:l1 = [1, 2, 3] l2 = [2,7,5,3] l3 = [7,3,9,5] l4 = [0, 1, -1] l5 = [-4, -2, -6]
Execução do programa:Código PHP:
def maior(lista):
maior_n = lista[-1]
for numero in lista:
if numero > maior_n:
maior_n = numero
print 'Maior numero em',lista,':',maior_n
maior([1, 2, 3])
maior([2,7,5,3])
maior([7,3,9,5])
maior([0, 1, -1])
maior([-4, -2, -6])
Código:Maior numero em [1, 2, 3] : 3 >>> maior([2,7,5,3]) Maior numero em [2, 7, 5, 3] : 7 >>> maior([7,3,9,5]) Maior numero em [7, 3, 9, 5] : 9 >>> maior([0, 1, -1]) Maior numero em [0, 1, -1] : 1 >>> maior([-4, -2, -6]) Maior numero em [-4, -2, -6] : -2
[Curso de Python] Funções com Argumentos
17 de Junho de 2010, 0:00 - sem comentários aindaAntes 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:
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.Código PHP:
>>> def ola(nome):
... print 'Ola',nome
...
>>>
>>> ola('joão')
Ola joão
>>> ola('Maria')
Ola Maria
>>> ola('José')
Ola José
>>>
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:
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.Código PHP:
>>> def ola(nome):
... print 'Ola',nome
...
>>>
>>> ola('joão')
Ola joão
>>> ola(12)
Ola 12
>>> ola([1,2,3])
Ola [1, 2, 3]
>>>
Vamos fazer uma função que busque uma determinada letra dentro de uma frase:
Execução do código:Código PHP:
def conta_letra(letra_esperada, frase):
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')
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.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
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:
Dica: Crie uma função que tenha como argumento um lista de notas.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]}
2. Faça uma função que calcule o quadrado de uma dado número. Exemplo:
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:>>> quadrado(2) 4 >>> quadrado(4) 8 >>> quadrado(3) 9
Código:l1 = [1, 2, 3] l2 = [2,7,5,3] l3 = [7,3,9,5] l4 = [0, 1, -1] l5 = [-4, -2, -6]
[CUrso de Python] Correção - O for e Outras Palavras Mais
16 de Junho de 2010, 0:00 - sem comentários aindaAntes de prosseguir leia os artigos anteriores aqui.
No último post eu deixei alguns exercícios a serem resolvidos. O nosso colega neiesc postou uma solução que pode ser conferida aqui.
A solução dele foi bem interessante mas utilizou algumas funções que ainda não estudamos aqui (como o sum), dessa forma vou postar uma solução somente utilizando loops for. Um pequeno detalhe que nosso colega esqueceu foi de especificar o numero como float na divisão das notas, o que pode causar certos problemas em um programa.
Vamos às soluções.
1. Dado o dicionário abaixo, faça programa que verifique qual dos alunos foi reprovado por falta. O critério de reprovação é ter mais faltado mais de 10 vezes.
Código:
Execução:Código PHP:
faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':10}
for aluno in faltas:
if faltas[aluno] > 10:
print 'O aluno',aluno,'foi reprovado por faltas'
2. Tendo o exemplo anterior como base, modifique o programa de forma que ele cruze os dados do dicionário de faltas com o dicionário de notas (a baixo) e informe se o aluno foi aprovado, usando o critério de faltas e a média de suas notas (maior que 6).Código:O aluno aluno4 foi reprovado por faltas
Execução:Código PHP:
faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':10}
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]}
for aluno in faltas:
if faltas[aluno] > 10:
print 'O aluno',aluno,'foi reprovado por faltas'
else:
media = 0
for nota in notas[aluno]:
media += nota
media = float(media)/3
if media >= 6:
print 'O aluno',aluno,'foi aprovado com média:',media
else:
print 'O aluno',aluno,'foi reprovado com média:',media
Como eu comentei, esses são exercícios simples apenas para fixação dos conceitos estudados até aqui. De agora para frente os exercícios serão bem diferentes.Código:O aluno aluno1 foi reprovado com média: 5.33333333333 O aluno aluno3 foi aprovado com média: 6.66666666667 O aluno aluno2 foi aprovado com média: 7.0 O aluno aluno5 foi reprovado com média: 4.66666666667 O aluno aluno4 foi reprovado por faltas O aluno aluno6 foi aprovado com média: 6.0
Até mais...
[Curso de Python] Introdução à Funções em Python
10 de Junho de 2010, 0:00 - sem comentários aindaAntes de prosseguir leia os artigos anteriores aqui.
Olá pessoal!
A alguns dias concluímos o aprendizado básico de controle de fluxo usando o if, elif, else, while e o for. Agora vamos aprender a trabalhar com funções, uma outra estrutura que serve para controle de fluxo de um programa.
OIntrodução às Funções em Python
Definição: Uma função é um bloco de código que recebe a designação de um nome. Ela também possui parâmetros e argumentos e retornam um valor.
Como essa primeira parte é apenas introdutória vamos ver o básico de funções, nada de argumentos/parâmetros e nada de retornar valores.
O Python possui diversas funções predefinidas, algumas já até vistas por nos. Essas funções são comumente classificadas como built-in functions. Em um post futuro irei abordar as funções built-in mais importantes, por enquanto vamos aprender a como criar nossas próprias funções.
Defininado uma função
As funções em Python são definidas usando a palavra-chave def. Após o def inserimos o nome da função e um par de parênteses e dois pontos (:). Os dois pontos são fundamentais para a definição de uma função.
Assim como o while, o for o if, elif e o else os dois pontos definem o início de um novo bloco de código que obrigatoriamente deve ser identado. Vamos ver um exemplo:
Execução do programa:Código PHP:
def ola():
print 'Olá mundo!'
ola()
ola()
ola()
As funções são muito úteis para "compactar" um código. O nome correto disso é reutilização de código, é algo fundamental para um programador. Vamos ver um exemplo de reutilização de código. Vamos supor que precisamos de um programa que conte quantas vezes a letra aparece nas palavras ('teste', 'reutilizacao', 'codigo'). Para tornar essa necessidade mais explícita não podemos usar nenhuma forma de loop.Código:Olá mundo! Olá mundo! Olá mundo!
Primeiramente vamos ver uma resolução desse problema sem a utilização de funções:
Execução do código:Código PHP:
palavra = 'teste'
contador = 0
for letra in palavra:
if letra == 'a':
contador += 1
print 'Na palavra',palavra,'exitem',contador,'ocorrencias da letra a'
palavra = 'reutilizacao'
contador = 0
for letra in palavra:
if letra == 'a':
contador += 1
print 'Na palavra',palavra,'exitem',contador,'ocorrencias da letra a'
palavra = 'codigo'
contador = 0
for letra in palavra:
if letra == 'a':
contador += 1
print 'Na palavra',palavra,'exitem',contador,'ocorrencias da letra a'
Agora vamos rever como refazer o código acima utilizando funções:Código:Na palavra teste exitem 0 ocorrencias da letra a Na palavra reutilizacao exitem 2 ocorrencias da letra a Na palavra codigo exitem 0 ocorrencias da letra a
Execução do código:Código PHP:
def busca_letra():
contador = 0
for letra in palavra:
if letra == 'a':
contador += 1
print 'Na palavra',palavra,'exitem',contador,'ocorrencias da letra a'
palavra = 'teste'
busca_letra()
palavra = 'reutilizacao'
busca_letra()
palavra = 'codigo'
busca_letra()
Podemos ver que ambos possuem a mesma saída, mas (depois que se acostuma com as funções) o segundo exemplo é extremamente mais legivel.Código:Na palavra teste exitem 0 ocorrencias da letra a Na palavra reutilizacao exitem 2 ocorrencias da letra a Na palavra codigo exitem 0 ocorrencias da letra a
Além de tornar um código mais legível, a reutilzação de código permite que o programa seja reformulado com mais facilidade. Por exemplo, se quisermos que ao invés de buscar a letra 'a' seja buscada a letra 'c', no primeiro exemplo teríamos que alterar 3 linhas de código, já no segundo exemplo, basta alterar uma linha.
Sei que isso pode parecer pouco, mas em um programa realmente complexo isso pode ser a diferença entre alterar 4 linhas ou 52 linhas distribuídas em 10 arquivos diferentes.
Como esta é apenas uma introdução às funções não vou deixar nenhum exercício, até mesmo porque usar uma função desta forma que mostrei não é a melhor das opções.
Até mais...
[Curso de Python] O for e Outras Palavras Mais
8 de Junho de 2010, 0:00 - sem comentários aindaAntes de prosseguir leia os artigos anteriores aqui.
Olá pessoal!! Retomando os posts desse curso de Python, se é que alguém ainda lembra quem eu sou...
O For e Outras Palavras Mais
Assim como o while, o for também pode ser associado a algumas palavras que o tornam mais útil. Então aqui vamos ver como usar o for em conjunto com as instruções break e else. Como todos esses já foram explicados utilizando a estrutura while não vou aprofundar muito no funcionamento desses, vou apenas mostrar alguns exemplos de implementação e deixar alguns exercícios.
A instrução break
A instrução break, conforme visto anteriormente, é útil para interromper abruptamente um loop. Para exemplificar vamos fazer um loop que procura a primeira ocorrência de um mesmo número dentro de duas listas.
Output gerado:Código:lista1 = [1,2,3] lista2 = [7, 5, 3, 4, 1] for item1 in lista1: print 'procurando por',item1,'...' for item2 in lista2: print '\t',item1,'==',item2,'??', if item1 == item2: print ' Sim!' break else: print ' Não'
Coloquei muitos print para mostrar que o break impede que a lista2 seja percorrida totalmente.Código:procurando por 1 ... 1 == 7 ?? Não 1 == 5 ?? Não 1 == 3 ?? Não 1 == 4 ?? Não 1 == 1 ?? Sim! procurando por 2 ... 2 == 7 ?? Não 2 == 5 ?? Não 2 == 3 ?? Não 2 == 4 ?? Não 2 == 1 ?? Não procurando por 3 ... 3 == 7 ?? Não 3 == 5 ?? Não 3 == 3 ?? Sim!
A instrução else
Podemos ver que eu gerei muito output pra tornar o fluxo compreensivo além de não ter percebido que o número 2 não foi encontrado na lsita2. Com a ajuda da instrução else, podemos simplificar esse output e também detectar que o numero 2 não foi encontrado.
Output gerado:Código:lista1 = [1,2,3] lista2 = [7, 5, 3, 4, 1] for item1 in lista1: print 'procurando por',item1,':', for item2 in lista2: if item1 == item2: print 'Encontrado!' break else: print 'Não encontrado...'
ExercíciosCódigo:procurando por 1 : Encontrado! procurando por 2 : Não encontrado... procurando por 3 : Encontrado!
A título de fixação deixo alguns exercícios:
1. Dado o dicionário abaixo, faça programa que verifique qual dos alunos foi reprovado por falta. O critério de reprovação é ter mais faltado mais de 10 vezes.
2. Tendo o exemplo anterior como base, modifique o programa de forma que ele cruze os dados do dicionário de faltas com o dicionário de notas (a baixo) e informe se o aluno foi aprovado, usando o critério de faltas e a média de suas notas (maior que 6).Código:faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':10}
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]}