Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] O for e Outras Palavras Mais

Avalie este Post de Blog

Antes 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.

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'
Output gerado:
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!
Coloquei muitos print para mostrar que o break impede que a lista2 seja percorrida totalmente.



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.
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...'
Output gerado:
Código :
procurando por 1 : Encontrado!
procurando por 2 : Não encontrado...
procurando por 3 : Encontrado!
Exercícios
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.
Código :
faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':10}
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 :
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]}

Comentários

  1. Avatar de Magal
    Bom Garoto!! Voltou.
  2. Avatar de Magnun
    Hehe.... Acho que sim!
  3. Avatar de neiesc
    Fica ai minha resolução dos exercicios
    Exercicio 1:
    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 %s reprovou pois tem %i faltas' %(alunofaltas[aluno])
        else:
            print 
    'O %s passou pois tem %i faltas' %(alunofaltas[aluno]) 
    Exercicio 2:
    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]}
    faltas = {'aluno1':2'aluno2':3'aluno3':7'aluno4':11'aluno5':0'aluno6':10}
    for 
    aluno in notas:
        
    media sum(notas[aluno]) / len(notas[aluno])

        if 
    media and faltas[aluno] <= 10:
            print 
    'O %s foi aprovado, media: %i faltas: %i' %(alunomediafaltas[aluno])
        else:
            print 
    'O %s foi reprovado, media: %i faltas: %i' %(alunomediafaltas[aluno]) 
  4. Avatar de Magnun
    @neiesc,
    ótima resolução! Parabéns. Não esqueça de acompanhar o resto do curso.

    Até mais...
  5. Avatar de cleoson
    Olá Magnun,
    Abaixo minha resolução para os exercícios:

    Primeiro exercício:
    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':10}
     
    for aluno,falta in faltas.items():
        if falta > 10:
            print 'Aluno:',aluno,'REPROVADO! Possui',falta,'faltas!'
    Segundo Exercício:
    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    faltas = {'aluno1':2, 'aluno2':3, 'aluno3':7, 'aluno4':11, 'aluno5':0, 'aluno6':1}
    notas = {'aluno1':[5,6,5], 'aluno2':[7,8,6], 'aluno3':[6,6,8], 'aluno4':[5,9,8], 'aluno5':[5,6,3], 'aluno6':[6,6,7]}
     
    for aluno_notas,nota in notas.items():
        media = 0
        for notan in nota:
            media += notan
        media = float(media) / len(nota)
        if media > 6:
            for aluno_faltas,falta in faltas.items():
                if aluno_notas == aluno_faltas:
                    if falta < 10:
                         print 'Aluno',aluno_notas,'aprovado.'
                    break

    Um abraço!
  6. Avatar de Magnun
    Ótimo cara!! Obrigado por comentar!
  7. Avatar de fabraga
    Na versão do Python que eu uso sou obrigado a usar a função "print()", que vai para a linha de baixo automaticamente após sua execução. Tem como evitar que isso aconteça? Porque eu gostaria que continuasse na mesma linha quando eu fosse adicionar uma informação como "Aluno reprovado por falta e por média" mas infelizmente não consigo fazer isso. Segue minha solução para os exercícios:

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

    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 notas
        if 
    faltas[aluno]>10:
            print(
    aluno,"reprovado por número de faltas")
        if (
    sum(notas[aluno]) / len(notas[aluno])) <6:
            print(
    aluno,"reprovado por média"
    Por algum motivo o resultado também está saindo fora de ordem. Você saberia me ajudar a explicar por quê isso acontece?
    Código :
    Python 3.2 (r32:88445, Feb 20 2011, 21:30:00) [MSC v.1500 64 bit (AMD64)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> ================================ RESTART ================================
    >>> 
    aluno1 reprovado por média
    aluno5 reprovado por média
    aluno4 reprovado por número de faltas
    >>>
    Valeu!
    Atualizado 08-06-2011 em 13:28 por fabraga
  8. Avatar de Magnun
    Taí uma boa pergunta... Ainda n testei o novo Python pra saber :D

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L