Subsecções

2.5.2 Laço iterativo: for

Há apenas dois tipos de laços em Python: for e while. O primeiro tipo, mais freqüentemente utilizado, percorre uma seqüência em ordem, a cada ciclo substituindo a variável especificada por um dos elementos. Por exemplo:

    >>> jan_ken_pon = ["pedra", "papel", "cenoura"]
    >>> for item in jan_ken_pon:
    ...   print item
    ...
    pedra
    papel
    cenoura

A cada iteração, item recebe o valor de um elemento da seqüência. Para efetuar uma laço com um número fixo de iterações, costuma-se usar o for em conjunto com a função range, que gera seqüências de números:

    >>> for i in range(1,4):
    ...   print "%da volta" % i
    ...
    1a volta
    2a volta
    3a volta

2.5.2.1 Iteração em dicionários

Para iterar em dicionários, podemos usar as funções keys() ou values() para gerar uma lista:

    >>> dict = {"batata": 500, "abóbora": 1200, 
    ...         "cebola": 800}
    >>> for e in dict.keys():
    ...   print "Item: %8s Peso: %8s" % (e, dict[e])
    Item: cebola  Peso:   800
    Item: batata  Peso:   500
    Item: abóbora Peso:  1200

Note que porque o dicionário em si não possui um conceito de ordem, a lista que resulta do método keys() possui ordenação arbitrária. Por este motivo, no exemplo acima, o laço não segue a declaração do dicionário.

2.5.2.2 Controle adicional em laços

Para ambos os tipos de laço, existem duas instruções de controle adicional, continue e break. A primeira reinicia uma nova iteração imediatamente, interrompendo a iteração atual; a segunda faz o laço terminar imediatamente.

A forma geral do laço for é:

    for variável in seqüência:
        # bloco de código
    else:
        # bloco executado na ausência de um break

Note a presença da cláusula else. Esta cláusula é executada quando a saída do laço não for determinada por uma instrução break. Um exemplo clarifica este mecanismo:

    valores = [2, 4, 5, 2, -1]
    for i in valores:
        if i < 0:
            print "Negativo encontrado: %d" % i
            break
    else:
        print "Nenhum negativo encontrado"