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
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