Controle de fluxo

Nos programas que vimos até agora, sempre houve uma série de declarações fielmente executadas pelo Python na ordem exata de cima para baixo. E se você quisesse mudar o fluxo de como funciona? Por exemplo, você quer que o programa tome algumas decisões e faça coisas diferentes, dependendo de situações diferentes, como a impressão de "Bom dia" ou "Boa noite", dependendo da hora do dia?

Como você pode ter adivinhado, isso é conseguido usando instruções de fluxo de controle. Existem três instruções de fluxo de controle em Python - if, for e while.

A declaração if

A declaração if é usado para verificar uma condição: if A condição é verdadeira, nós executamos um bloco de declarações (chamado de if-block), else processamos outro bloco de declarações (chamado de else-block). A cláusula else é opcional.

Exemplo (salvar como if.py):

number = 23
guess = int(input('Enter an integer : '))

if guess == number:
    # New block starts here
    print('Congratulations, you guessed it.')
    print('(but you do not win any prizes!)')
    # New block ends here
elif guess < number:
    # Another block
    print('No, it is a little higher than that')
    # You can do whatever you want in a block ...
else:
    print('No, it is a little lower than that')
    # you must have guessed > number to reach here

print('Done')
# This last statement is always executed,
# after the if statement is executed.

Saída:

$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done

$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done

$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done

Como funciona

Neste programa, adolecemos conjecturas do usuário e verificamos se é o número que temos. Definimos a variável number para qualquer número inteiro que queremos, digamos 23. Então, nós adiantamos o palpite do usuário usando a função input(). As funções são apenas peças reutilizáveis de programas. Vamos ler mais sobre eles no Próximo Capítulo.

Nós fornecemos uma string para o built-in input função que imprime na tela e aguarda a entrada do usuário. Depois de inserir algo e pressionar a tecla kbd: [enter], o input() A função retorna o que entramos, como uma string. Então, convertem essa string em um inteiro usando int e depois armazená-lo na variável guess. Na verdade, o int é uma classe, mas tudo o que você precisa saber agora é que você pode usá-lo para converter uma seqüência de caracteres em um inteiro (assumindo que a seqüência contém um número inteiro válido no texto).

Em seguida, comparamos o palpite do usuário com o número que escolhemos. Se forem iguais, imprimimos uma mensagem de sucesso. Observe que usamos níveis de indentação para dizer ao Python quais declarações pertencem a qual bloco. É por isso que a indentação é tão importante em Python. Espero que você esteja aderindo à regra do "recuo consistente". Você está?

Observe como o if A declaração contém dois pontos no final - estamos indicando ao Python que um bloco de instruções segue.

Então, verificamos se o palpite é menor do que o número, e se assim for, informamos o usuário que eles devem adivinhar um pouco mais alto do que isso. O que usamos aqui é o elif cláusula que realmente combina dois if else-if else declarações em um combinado if-elif-else declaração. Isso facilita o programa e reduz a quantidade de indentação necessária.

A elif e else As declarações também devem ter dois pontos no final da linha lógica, seguidas do respectivo bloco de instruções (com indentação adequada, é claro)

Você pode ter outro if declaração dentro do if-block de um if declaração e assim por diante - isso é chamado de aninhado declaração if.

Lembre-se de que o elif e else as peças são opcionais. Um mínimo válido if declaração é:

if True:
    print('Yes, it is true')

Depois que o Python terminar de executar o completo if declaração junto com o associado elif e else cláusulas, ele passa para a próxima declaração no bloco que contém a declaração if. Nesse caso, é o bloco principal (onde a execução do programa começa), e a próxima declaração é a print('Done') declaração. Depois disso, Python vê as extremidades do programa e simplesmente termina.

Embora este seja um programa muito simples, mostrei muitas coisas que você deve notar. Tudo isso é bastante direto (e surpreendentemente simples para aqueles de vocês de C / C ++ backgrounds). Você precisará tomar consciência de todas essas coisas inicialmente, mas depois de alguma prática você se sentirá confortável com elas, e tudo se sentirá "natural" para você.

Nota para programadores C / C ++

Não há switch declaração em Python. Você pode usar um if..elif..else declaração para fazer o mesmo (e em alguns casos, use um dicionario para fazê-lo rapidamente)

A declaração While

A declaração while permite que você execute repetidamente um bloco de instruções, desde que uma condição seja verdadeira. A declaração while é um exemplo do que é chamado de declaração looping. A declaração while pode ter uma clausula opcional else.

Exemplo (salvar como while.py):

number = 23
running = True

while running:
    guess = int(input('Enter an integer : '))

    if guess == number:
        print('Congratulations, you guessed it.')
        # this causes the while loop to stop
        running = False
    elif guess < number:
        print('No, it is a little higher than that.')
    else:
        print('No, it is a little lower than that.')
else:
    print('The while loop is over.')
    # Do anything else you want to do here

print('Done')

Saída:

$ python while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done

Como funciona

Neste programa, ainda estamos jogando o jogo de adivinhação, mas a vantagem é que o usuário tenha permissão para continuar adivinhando até que ele adivinha corretamente - não há necessidade de executar repetidamente o programa para cada adivinhação, como fizemos na seção anterior . Isso demonstra com certeza o uso da declaração while.

Nós movemos o input e if declarações para dentro while loop e ajuste a variável running para True antes do loop while. Primeiro, verificamos se a variável running é True e depois proceder a executar o correspondente while-block. Após este bloco ser executado, a condição é novamente verificada, que neste caso é o running variável. Se é verdade, nós executamos o bloco while novamente, senão continuamos a executar o else-block opcional e depois continuamos para a próxima declaração.

O bloco else é executado quando o while condição de loop torna-se False - Isso pode até ser a primeira vez que a condição é verificada. Se houver um else cláusula para while loop, ele sempre é executado a menos que você saia do loop com uma declaração break.

A True e False são chamados de tipos booleanos e você pode considerá-los como equivalentes ao valor 1 e 0 respectivamente.

Nota para programadores C / C ++

Lembre-se de que você pode ter um else cláusula para while loop.

O for loop

A declaração for..in é outra declaração em loop que iterates Sobre uma seqüência de objetos, digamos, cada item em uma seqüência. Vamos ver mais sobre sequencias em detalhes em capítulos posteriores. O que você precisa saber agora é que uma seqüência é apenas uma coleção ordenada de itens.

Exemplo (salvar como for.py):

for i in range(1, 5):
    print(i)
else:
    print('The for loop is over')

Saída:

$ python for.py
1
2
3
4
The for loop is over

Como funciona

Neste programa, estamos imprimindo uma sequencia de numeros. Nós geramos essa seqüência de números usando o built-in a função range.

O que fazemos aqui é fornecer dois números e range retorna uma seqüência de números a partir do primeiro número e até o segundo número. Por exemplo, range(1,5) dá a sequência [1, 2, 3, 4]. Por padrão, range demora uma etapa de 1. Se fornecemos um terceiro número para range, então isso se torna a contagem de etapas. Por exemplo, range(1,5,2) da [1,3]. Lembre-se de que o alcance se estende até o segundo número, isto é, não incluir o segundo número.

Observe que range() gera apenas um número por vez, se desejar a lista completa de números, ligue para list() no range(), por exemplo, list(range(5)) vai resultar em [0, 1, 2, 3, 4]. As listas são explicadas no capítulo de estruturas de dados.

O loop for então itera sobre esse intervalo - for i in range(1,5) é equivalente a for i in [1, 2, 3, 4] que é como atribuir cada número (ou objeto) na seqüência a i, um de cada vez e, em seguida, executar o bloco de instruções para cada valor de i. Nesse caso, apenas imprimimos o valor no bloco de declarações.

Lembre-se de que o else parte é opcional. Quando incluído, é sempre executado uma vez após o for loop acabou, a não ser que break declaração é encontrada.

Lembre-se de que o for..in loop funciona para qualquer sequência. Aqui, temos uma lista de números gerados pelo built-in range função, mas, em geral, podemos usar qualquer tipo de sequência de qualquer tipo de objetos! Exploraremos esta idéia em detalhes em capítulos posteriores.

Nota para programadores C / C ++ / Java / C #

O loop Python for é radicalmente diferente do C / C ++ for loop. Os programadores C # notarão que o C / C ++ for loop em Python é semelhante ao foreach loop em C #. Os programadores Java notarão que o mesmo é semelhante ao for (int i : IntArray) em Java 1.5.

Em C / C ++, se você quiser escrever for (int i = 0; i < 5; i++), então, em Python você escreve apenas for i in range(0,5). Como você pode ver, o for loop é mais simples, mais expressivo e menos propenso a erros em Python.

A declaração Break

A declaração break é usado para break fora de uma instrução de loop, ou seja, interrompa a execução de uma instrução de loop, mesmo que a condição do loop não tenha se tornado False ou a sequência de itens não foi completamente iterada.

Uma nota importante é que, se você break fora de um for ou while loop, qualquer correspondente loop else bloqueio é not executado.

Exemplo (salvar como break.py):

while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    print('Length of the string is', len(s))
print('Done')

Saída:

$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 11
Enter something : quit
Done

Como funciona

Neste programa, repetidamente tomamos a entrada do usuário e imprimos o comprimento de cada entrada de cada vez. Estamos fornecendo uma condição especial para parar o programa, verificando se a entrada do usuário é 'quit'. Paramos o programa por quebrar fora do loop e chegar ao final do programa.

O comprimento da seqüência de entrada pode ser descoberto usando o built-in da função len .

Lembre-se que a declaração break pode ser usado com o for loop também.

Pitão poético de Swaroop

A entrada que usei aqui é um mini poema que escrevi:

Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!

A declaração continue

A declaração continue é usado para dizer ao Python que salte o resto das instruções no bloco de loop atual e para continue para a próxima iteração do loop.

Exemplo (salvar como continue.py):

while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    if len(s) < 3:
        print('Too small')
        continue
    print('Input is of sufficient length')
    # Do other kinds of processing here...

Saída:

$ python continue.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit

Como funciona

Neste programa, aceitamos a entrada do usuário, mas processamos a string de entrada somente se tiver pelo menos 3 caracteres. Então, usamos o built-in len função para obter o comprimento e se o comprimento for inferior a 3, ignoramos o resto das instruções no bloco usando o continue declaração. Caso contrário, o resto das instruções no loop são executadas, fazendo qualquer tipo de processamento que queremos fazer aqui.

Observe que a declaração continue funciona com o for loop também.

Resumo

Vimos como usar as três instruções de fluxo de controle - if, while e for juntamente com os seus associadosbreak e continue afirmações. Estas são algumas das partes mais utilizadas de Python e, portanto, tornar-se confortável com elas é essencial.

Em seguida, veremos como criar e usar funções.