While loop - Learn Python 3 - Snakify

Lesson 6
Enquanto loop


1. Enquanto loop

while loop repete a seqüência de ações várias vezes até que alguma condição seja avaliada como False . A condição é dada antes do corpo do loop e é verificada antes de cada execução do corpo do loop. Tipicamente, o while de loop é utilizado quando é impossível determinar o número exacto de iterações de ansa com antecedência.

A sintaxe da while loop no caso mais simples parece com isso:

while some condition:
    a block of statements

Em primeiro lugar, o Python verifica a condição. Se for falsa, então o loop é encerrado e controle é passado para a próxima instrução após o while corpo do laço. Se a condição for True, o corpo do loop será executado e, em seguida, a condição será verificada novamente. Isso continua enquanto a condição é verdadeira. Quando a condição se torna False, o loop é finalizado e o controle é passado para a próxima instrução após o loop.

Por exemplo, o fragmento de programa a seguir imprime os quadrados de todos os inteiros de 1 a 10. Aqui, um pode substituir o loop "while" pelo loop for ... in range(...) :

i = 1
while i <= 10:
    print(i ** 2)
    i += 1

Neste exemplo, a variável i dentro do loop itera de 1 a 10. Essa variável, cujo valor muda com cada nova iteração de loop, é chamada de contador. Note que depois de executar este fragmento o valor da variável i é definido e é igual a 11 , porque quando i == 11 a condição i <= 10 é False pela primeira vez.

Aqui é outro exemplo de utilização o while loop para determinar o número de dígitos de um número inteiro n :

n = int(input())
length = 0
while n > 0:
    n //= 10  # isso é equivalente a n = n // 10
    length += 1
print(length)  # 4

Em cada iteração, cortamos o último dígito do número usando a divisão de inteiros por 10 ( n //= 10 ). No length variável, contamos quantas vezes fizemos isso.

No Python existe outra maneira mais fácil de resolver este problema: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Fluxo de controle de loop: else

Pode-se escrever uma instrução else: depois de um corpo de loop que é executado uma vez após o final do loop:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

À primeira vista, essa afirmação parece não ter sentido, porque o corpo da instrução else: pode ser colocado após o final do loop. A instrução "else" depois de um loop só tem sentido quando usada em combinação com a break instrução. Se durante a execução do loop o interpretador Python encontrar break , ele imediatamente interrompe a execução do loop e sai dele. Nesse caso, o else: branch não é executado. Então, break é usado para abortar a execução do loop durante o meio de qualquer iteração.

Aqui está um exemplo do tipo Black Jack: um programa que lê números e soma até que o total fique maior ou igual a 21. A seqüência de entrada termina com 0 para que o programa possa parar mesmo que a soma total de todos os números seja menos de 21.

Vamos ver como ele se comporta nas diferentes entradas.

Versão 1. O loop é encerrado normalmente após a verificação da condição, portanto a ramificação "else" é executada.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Versão 2. O loop é interrompido por break , então a ramificação "else" é ignorada.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

A ramificação "Else" também pode ser usada com o loop "for". Vejamos o exemplo quando um programa lê 5 inteiros, mas pára à direita quando o primeiro inteiro negativo é atingido.

Versão 1. O loop é encerrado normalmente, portanto, a ramificação "else" é executada.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Versão 2. O loop é abortado, portanto a ramificação "else" não é executada.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Fluxo de controle de loop: continue

Outra instrução usada para controlar a execução do loop é continue . Se Python intérprete encontra continue em algum lugar no meio da iteração do loop, ele ignora todas as instruções restantes e passa para a próxima iteração.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Se o break e continue forem colocados dentro de vários loops aninhados, eles afetarão apenas a execução do mais interno. Vamos olhar um exemplo bastante bobo para demonstrar isso:

for i in range(3):
    for j in range(5):
        if j > i:
            # quebra apenas o para na linha 2
            break
        print(i, j)

As instruções break e continue são desencorajadas, se você puder implementar sua ideia sem usá-las. Aqui está um exemplo típico de um mau uso da break : esse código conta o número de dígitos em um inteiro.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

É mais limpo e mais fácil de ler para reescrever esse loop com uma condição de loop significativa:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Múltipla atribuição

Em Python, é possível que uma única instrução de atribuição altere o valor de várias variáveis. Vamos ver:

a, b = 0, 1

O efeito demonstrado acima do código pode ser escrito como:

a = 0
b = 1

A diferença entre as duas versões é que a atribuição múltipla altera os valores de duas variáveis ​​simultaneamente.

A atribuição múltipla é útil quando você precisa trocar os valores de duas variáveis. Em linguagens de programação antigas, sem o suporte de múltiplas atribuições, isso pode ser feito usando a variável auxiliar:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

No Python, a mesma troca pode ser escrita em uma linha:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

O lado esquerdo de "=" deve ter uma lista separada por vírgulas de nomes de variáveis. O lado direito pode ser qualquer expressão, separado por vírgulas. O lado esquerdo e as listas do lado direito devem ter o mesmo comprimento.

Advertising by Google, may be based on your interests