Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Estruturas For Aninhadas

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui.



Olá pessoal!! Sei que sumi e demorei para postar essa continuação! Peço desculpas a todos e garanto que vou retomar a regularidade das postagens.

Sem mais delongas, vamos ao que interessa!



Estruturas For Aninhadas



Muitas vezes uma única estrutura for não é o suficiente para realizarmos um trabalho, para sanar isso utilizamos um aninhamento de estruturas for. Uma estrutura for aninhada nada mais é que "um for dentro de outro for".

Um aninhamento de 2 fors torna possível percorrer e analisar estruturas de duas dimensões. Um simples exemplo a baixo:
Código :
listas_nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for lista_num in listas_nums:
    # For externo, responsável por percorrer pegar a lista de números dentro da lista
    print 'Encontrei a lista',lista_num
    print '   Essa lista é composta por:',
    for num in lista_num:
        # For interno, responsável por percorrer os números dentro de cada lista.
        print num,
    print ''
Nesse exemplo, nosso for mais externo percorre o conteúdo da lista listas_nums, que são as seguintes listas: [1, 2, 3], [4, 5, 6] e [7, 8, 9]. O for mais interno é executado em cada uma dessas listas, dessa forma ele percorre o conteúdo (números) de cada lista. abaixo a saída produzida pelo código acima:
Código :
Encontrei a lista [1, 2, 3]
   Essa lista é composta por: 1 2 3
Encontrei a lista [4, 5, 6]
   Essa lista é composta por: 4 5 6
Encontrei a lista [7, 8, 9]
   Essa lista é composta por: 7 8 9
Esse tipo de abordagem é efetiva para uma série de problemas. Vamos ver agora alguns exemplos mais práticos, como por exemplo calcular a média dos valores de cada lista:
Código :
listas_nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for lista_num in listas_nums:
    tamanho = len(lista_num)
    soma = 0
    for num in lista_num:
        soma = soma + num
    media = float(soma)/tamanho
    print 'A média da lista', lista_num, 'é:',media
Segue a saída gerada pelo código acima:
Código :
A média da lista [1, 2, 3] é: 2.0
A média da lista [4, 5, 6] é: 5.0
A média da lista [7, 8, 9] é: 8.0

Exercícios


Agora vou deixar alguns exercícios para vocês resolverem:

1. O dicionário abaixo representa uma lista de alunos (chaves) e suas notas (valores). Percorra esse dicionário e calcule a média de cada aluno imprimindo o nome do aluno seguido de sua nota.
alunos = {'fulano':[6, 7, 5, 2], 'sicrano':[7, 8, 9, 8], 'beltrano':[10, 9, 10, 10]}

2. Repita o exercício 1 informando, ao final de tudo, a média da turma.

3. Repita o exercício 2 informando quais alunos foram aprovados (média deve ser maior ou igual a 6).

Comentários

  1. Avatar de Não Registrado(s)
    Estou estudando python por vários meios - internet, apostilas, etc - mas todos sofrem do mesmo problema não têm exemplos ou quase nenhum, e vi que você se aprofunda mais ainda no tema que as vezes nessas apostilas dão apenas uma breve explicação.
    Então aqui vai a pergunta: Você estuda/estudou de uma fonte específica? Qual livro ou site você usa como referencia? Você tem o material do seu curso em pdf para baixar em forma de apostila? Estou sem internet em casa, e baixar no trabalho ajudaria muito.
    Obrigado desde já pela atenção. Continue o bom trabalho.
  2. Avatar de acris
    Oi, Magnun. Quanto tempo, ein? Muito legal esse mini-curso de phyton que você está disponibilizando aqui. Valeu!
    bjs
    Acris
  3. Avatar de Magnun
    @ acris,
    Olá acris, obrigado pelos elogios!

    @Não Registrado,
    Eu aprendi python usando o oráculo e a minha curiosidade. Peguei diversos livros gratuitos como por exemplo o "A Byte of Python" do Swaroop e o "Dive into Python" do Mark Pilgrin.

    Mas eu aprendi muito quando decidi desenvolver uma aplicação de verdade. Tem certas coisas que livros não ensinam cara...
  4. Avatar de Jockerman
    Sou um iniciante em Python, mas no meu ponto de vista o Van Rossum não conseguiu imprimir ao for no Python o mesmo poder que encontramos no for em outras linguagens (C por exemplo). Embora em algumas situações o for Python certamente é mais apropriado.

    Talvez essas limitações peculiares de cada linguagem de programação expliquem a necessidade de conhecer outras linguagens, para solucionar problemas particulares. Não raro torna-se necessário embutir código C inline em Python e vice-versa, seja para facilitar a solução de algum problema (Python em C) ou mesmo aumentar o desempenho (C em Python).
  5. Avatar de Magnun
    Olá Jokerman, para um iniciante em Python, você parece ter conhecimentos bem vastos! Um iniciante geralmente nem tem idéia do que é Cython.

    Com certeza todas as linguagens tem suas vantagens e peculiaridades, mas até o momento não achei algo que o for do C faz e o for do Python não é capaz de fazer, poderia me dar um exemplo?

    Obrigado pelos comentários!
  6. Avatar de Jockerman
    Uma limitação obvia seria o limite máximo da função range, em caso de iterações muito grandes acontece overflow. Tem como contornar isso (embora parece ser algo pouco utilizado)? xrange() seria uma alternativa?
    Atualizado 03-03-2010 em 21:36 por Jockerman
  7. Avatar de Magnun
    Jockerman,

    para caso de iterações muito grandes, ao invés de utilizar funções range ou xrange em conunto com o for eu utilizaria o while. A também sempre a possibilidade de utilizar Cython, nele existe uma implementação do for similar ao encontrado na linguagem C.
  8. Avatar de cleoson
    Olá Magnun,
    Resolvi colocar as 03 questões em um código só. Acho que atende ao proposto por você:

    Código :
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    alunos = {'Fulano':[6, 7, 5, 2], 'Sicrano':[7, 8, 9, 8], 'Beltrano':[10, 9, 10, 10]}
     
    media_turma,qtde_alunos = 0, 0
     
    for aluno in alunos.items():
        cont, soma = 0, 0
        qtde_alunos += 1
        for nota in aluno[1]:
            tamanho = len(aluno[1])
            soma = soma + aluno[1][cont]
            media = float(soma) / tamanho
            status = 'Aprovado!' if media >= 6 else 'Reprovado!'
            cont += 1
        media_turma = media_turma + media
        print 'Nome:',aluno[0],'\t- Média:',media,'\t- Situação:',status
    print '-----------------------\nA média da turma é:',float(media_turma) / qtde_alunos

    Um abraço!
  9. Avatar de fabraga
    Estudei a solução do cleoson e percebi que poderia fazer umas melhorias reduzindo o número de variáveis e movendo algumas instruções para fora do segundo "for" a fim de acelerar a execução do programa. Veja como ficou:


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

    # Media de notas dos alunos

    alunos={'fulano':[6,7,5,2],'sicrano':[7,8,9,8],'beltrano':[10,9,10,10]}

    m_turman_alunos 0.000

    for aluno in alunos.items():
        
    soma 0.00
        n_alunos 
    += 1
        
    for nota in aluno[1]:
            
    notas len(aluno[1])
            
    soma += nota
        media 
    soma notas
        status 
    'Aprovado!' if media >= else 'Reprovado!'
        
    m_turma += media
        
    print('Nome:',aluno[0],'\t- Média:',media,'\t- Situação:',status)

    print(
    '\nA média da turma é: %.2f'%(m_turma n_alunos)) 
    Valeu cleoson! Se vc não tivesse feito a sua versão eu não saberia nem como fazer a minha porque ainda não sei quase nada de Python. ^^
    Atualizado 08-06-2011 em 10:59 por fabraga
  10. Avatar de Magnun
    Muito bom!

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L