Vamos explorar mais o comando while que aprendemos no post sobre loop while e aprender como utilizar dois novos comandos: break e continue.
Imagine que sua amiga quer se reencontrar com a Sara, uma amiga de infância com a qual perdeu o contato há muitos anos. A única coisa que sua amiga sabe é que a Sara continua morando na mesma rua, que é muito comprida, vai até a numeração 1000. Então ela pede sua ajuda pois ela se lembra que o número da casa é divisível por 17. Sua amiga quer que você ajude a identificar quais são todos os números de 1 a 1000 que são divisíveis por 17.
Então você tem a brilhante ideia de fazer um programa que imprime os números para você assim você evita de fazer 1000 contas de divisão.
Este é o problema perfeito para uso do laço (loop) while por que queremos executar a mesma operação diversas vezes. Como vamos limitar a execução até o valor 1000, devemos utilizar uma variável de controle para saber em qual passo estamos.
numero = 1
while numero < 1000:
numero = numero + 1
A cada iteração do while, incrementamos a variável numero com 1, o while deverá rodar 1000 vezes (na verdade vai rodar 999 vezes pois começamos do 1 e não do zero) .
Há uma maneira mais elegante de atualizar o valor de uma variável:
numero += 1
# equivalente a
numero = numero + 1
Operação módulo em Python
E como fazemos para saber se um número é divisível por outro? Podemos utilizar o operador modulo %.
numero1 = 10
numero2 = 2
resto = numero1 % numero2
if resto == 0:
print("10 é divisível por 2")
Este operador devolve o resto da divisão do primeiro número pelo segundo. No exemplo, ao dividir 10 por 2 o resultado do módulo é zero pois o resto da divisão é zero.
numero = 1
while numero < 1000:
if numero % 17 == 0:
print(numero)
numero += 1
Com esse código você já consegue passar para sua amiga a lista de todos os números da rua que são divisíveis por 17, porém a lista é ainda muito grande são 58 números no total. Vai ser bem difícil bater de porta em porta perguntando pela Sara. Você pede então para sua amiga tentar lembrar mais alguma característica do número que possa diminuir esta lista. Então ela te diz que tem certeza de que o número não termina nem zero nem 6. Portanto podemos excluir da lista todos os números que terminam em zero ou 6.
Para descobrir o último algarismo de um número podemos também utilizar o operador módulo. Se fizermos uma divisão por 10, o número que resta é o último algarismo. Por exemplo, se dividirmos 17 por 10, o resultado é 10 e o resto é 7. Se dividirmos 101 por dez o resultado é 10 e o resto da divisão é 1.
Utilizando Break e Continue em um laço while
Vamos alterar o programa para ignorar todos os números terminados em zero ou 6. Para isso podemos utilizar um outro comando do python: continue. Este comando pode ser usado apenas em laços, e indica para o Python que o laço atual não deve ser executado, então pulamos para o passo seguinte.
while numero < 1000:
numero += 1
if numero %10 == 0 or numero % 10 == 6:
continue
if numero % 17 == 0:
print(numero)
No trecho de código acima, o código if numero % 17 == 0 não será executado para todos os números que terminarem em zero ou 6 pois o comando continue fará com que o código volte ao while.
Um outro importante comando utilizado dentro de laços é o break. Break significa quebrar, e é justamente isso que ele faz, quebra o laço, ou seja, sai da execução do laço. Podemos escrever um while que vai do zero ao 1000 de outra forma:
numero = 0
while True:
if numero >= 1000:
break
numero += 1
Mesmo com a versão final, sua amiga ainda precisará bater em 50 portas na rua da Sara até encontrá-la, espero que ela esteja no começo da rua 😉
Solução final: https://repl.it/@julianajuliano/AmigaPerdida