While Loop em Python – repita operações sem repetir código

Os loops são a mágica da programação, eles nos permitem executar a mesma linha de código diversas vezes. Neste artigo vamos aprender a utilizar o loop while em python.

O que é um loop?

Loop significa laço e while significa enquanto. Utilizamos loops para repetirmos um trecho do código várias vezes. O while também recebe uma expressão booleana assim como o if, e a idea é que o seu trecho de código seja executado enquanto a expressão passada para o while for verdadeira.

while <expressão>:
	codigo 1
    codigo 2

Se quisermos por exemplo imprimir na tela um nome dez vezes, podemos fazer da maneira inocente:

nome = "Grace Hopper"

print(nome)
print(nome)
print(nome)
print(nome)
print(nome)
# etc
Aprenda a usar While em Python

Comando while em python

Uma maneira mais simples de fazer isto é criar uma variável contador e incrementá-la a cada laço do while. O while então deve checar se o contador é menor que 10. Enquanto o contador for menor que 10 o while vai ser executado.

nome = "Grace Hopper"
contador = 0

while contador < 10:
	print(nome)
    contador = contador + 1

Se não está muito claro para você o que esse código está fazendo, vamos colocar alguns prints para poder entender como o valor da variável contador está mudando a cada laço:

nome = "Grade Hopper"
contador = 0

while contador < 10:
	print("contador antes:" + str(contador))
	print(nome)
    contador = contador + 1
    print("contador depois:" + str(contador))

O resultado da execução deste código é:

contador antes:0
Grace Hopper
contador depois:1
contador antes:1
Grace Hopper
contador depois:2
contador antes:2
Grace Hopper
contador depois:3
contador antes:3
Grace Hopper
contador depois:4
contador antes:4
Grace Hopper
contador depois:5
contador antes:5
Grace Hopper
contador depois:6
contador antes:6
Grace Hopper
contador depois:7
contador antes:7
Grace Hopper
contador depois:8
contador antes:8
Grace Hopper
contador depois:9
contador antes:9
Grace Hopper
contador depois:10

Sempre que você estiver na duvida de como seu código está funcionando você pode utilizar este artifício e imprimir valores de variáveis para acompanhar a execução do programa passo a passo.

Existe uma outra maneira de atualizar a variável contador, que é utilizando o operador +=. No exemplo abaixo o valor atual da variável contador vai ser somada a 1 e guardado novamente na variável contador.

contador += 1
# igual a
contador = contador + 1

While na prática – Melhorando a calculadora

Podemos utilizar o loop while para melhorar o código da calculadora que fizemos no post meu primeiro software. Na versão inicial da calculadora o usuário podia executar um único cálculo, se ele quisesse executar outro cálculo era necessário executar o código novamente. Podemos criar um mecanismo em que o software não termine enquanto não receber um comando específico para isto. Vamos utilizar a palavra “sair”, enquanto o usuário não digitar o comando sair, a calculadora permanece em execução.

O software da calculadora já pedia o nome da operação a ser executada, podemos indicar para o usuário que se ele quiser para a execução, ele deve utilizar o comando sair.

operacao = input("Digite a operação (soma, sub, mult, div). Digite sair para encerrar: ")

E então podemos criar um laço while em volta de todo o programa para que tudo seja executado novamente enquanto a operação for diferente de sair:

while operacao != "sair": 
  numero1 = input("Digite o primeiro numero: ")
  numero2 = input("Digite o segundo numero: ")

  if operacao == "soma":
    resultado = int(numero1) + int(numero2)  
  if operacao == "sub":
    resultado = int(numero1) - int(numero2)
  if operacao == "mult":
    resultado = int(numero1) * int(numero2)
  if operacao == "div":
    resultado = int(numero1) / int(numero2)
  else:
    resultado = "operador não suportado, use soma, sub, mult ou div."

  print("O resultado da operação é: " + str(resultado))
  print("---------------------------------------")

Existem dois bugs no código acima. O primeiro é que o texto “operador não suportado, use soma, sub, mult ou div.” está sendo impresso para todas as operações (exceto a operação de divisão). Veja abaixo, se a operação for diferente de “div” o else vai entrar em ação por que todo else sempre se refere ao if anterior.

if operacao == "div":
    resultado = int(numero1) / int(numero2)
else:
    resultado = "operador não suportado, use soma, sub, mult ou div."

Para corrigir este problema é simples, basta utilizar else if (elif em python) em todas as operações.

if operacao == "soma":
  resultado = int(numero1) + int(numero2)  
elif operacao == "sub":
  resultado = int(numero1) - int(numero2)
elif operacao == "mult":
  resultado = int(numero1) * int(numero2)
elif operacao == "div":
  resultado = int(numero1) / int(numero2)
else:
   resultado = "operador não suportado, use soma, sub, mult ou div."

Loop Infinito em Python

O outro problema é que criamos um while infinito por que não estamos dando chance ao usuário de atualizar o valor da variável operacao. O loop while nunca vai terminar pois a variável operacao terá o valor definido antes do loop, ou seja a primeira operação que o usuário pediu.

Para corrigir também é simples, precisamos pedir ao usuário o valor da operação a cada final do loop para isto colocamos o código que pergunta ao usuário qual operação ele quer executar ao final do while:

while operacao != "sair": 
  numero1 = input("Digite o primeiro numero: ")
  numero2 = input("Digite o segundo numero: ")

  if operacao == "soma":
    resultado = int(numero1) + int(numero2)  
  elif operacao == "sub":
    resultado = int(numero1) - int(numero2)
  elif operacao == "mult":
    resultado = int(numero1) * int(numero2)
  elif operacao == "div":
    resultado = int(numero1) / int(numero2)
  else:
    resultado = "operador não suportado, use soma, sub, mult ou div."

  print("O resultado da operação é: " + str(resultado))
  print("---------------------------------------")
  operacao = input("Digite a operação (soma, sub, mult, div). Digite sair para encerrar: ")

Veja a última linha de código, ela está contida dentro do while e vai atualizar o valor da variável operação a cada laço. Desta forma quando o usuário digitar o comando “sair” a expressão while operacao != “sair” vai passar a ser falsa e o laço while terminará. Veja abaixo como o valor da variável operacao e a expressão do while muda se o usuário fizer uma soma seguida de uma multiplicação e finalmente pedir para sair:

"soma" != "sair" -> True # o while é valido então continua
"mult" != "sair" -> True # o while é valido então continua
"sair" != "sair" -> False # o while não é valido então termina

Versão final do código: https://repl.it/@julianajuliano/Calculadora-v2