Os loops são importantes em Python ou em qualquer outra linguagem de programação, pois ajudam você a executar um bloco de código repetidamente. Muitas vezes você se depara com situações em que precisa usar um trecho de código várias vezes, mas não quer escrever a mesma linha de código várias vezes.
Neste tutorial sobre loops em Python, você abordará os seguintes tópicos:
- O loop while do Python: você aprenderá como construir e usar um loop while em aplicativos de ciência de dados. Você fará isso passando por alguns desafios de codificação interativos.
- Em seguida, você passará para o loop for: mais uma vez, você aprenderá como construir e usar um loop for em um contexto da vida real.
- Você também aprenderá a diferença entre usar um loop while e um loop for.
- Também o tópico de loops aninhados
- Depois, você verá como pode usar as palavras-chave
break
econtinue
. - A diferença entre as funções
xrange()
erange()
Loop While
O loop while é um dos primeiros loops que você provavelmente encontrará quando estiver começando a aprender a programar. Sem dúvida, ele também é um dos mais intuitivos de entender: se você pensar no nome desse loop, entenderá rapidamente que a palavra "while" tem a ver com "intervalo" ou "período de tempo". Como você já sabe, a palavra "loop" refere-se a um trecho de código que é executado repetidamente.
Com tudo isso em mente, você pode entender facilmente a seguinte definição do loop while:
Um loop while é um conceito de programação que, quando implementado, executa um trecho de código repetidamente enquanto uma determinada condição ainda for verdadeira.
A definição acima também destaca os três componentes que você precisa para construir o loop while em Python:
- A palavra-chave
while
; - Uma condição que se transforma em
True
ouFalse
; e - Um bloco de código que você deseja executar repetidamente
Isso é tudo o que você precisa!
Como criar um loop while em Python
Agora que você sabe o que precisa para construir um loop while, tudo o que resta a fazer é examinar um exemplo real em que o loop while é usado antes de começar a fazer seus próprios exercícios! Considere o exemplo a seguir:
# Take user input
number = 2
# Condition of the while loop
while number < 5 :
print("Thank you")
# Increment the value of the variable "number by 1"
number = number+1
Thank you
Thank you
Thank you
O exemplo de código acima é um loop while muito simples: se você pensar bem, os três componentes sobre os quais leu anteriormente estão todos presentes: a palavra-chave while
, seguida de uma condição que se traduz em True
ou False
(number < 5
) e um bloco de código que você deseja executar repetidamente:
print("Thank you")
number = number + 1
Se você analisar detalhadamente o código acima, verá que há uma variável number
na qual você armazena um número inteiro 2
. Como o valor em number
é menor que 5, você imprime "Thank you"
e aumenta o valor de number
em um. Enquanto o valor em number
permanecer menor que 5, você continuará a executar as duas linhas de código contidas no loop while:
"Thank you"
"Thank you"
Você imprime "Thank you" mais duas vezes antes que o valor de number
seja igual a 5
e a condição não seja mais avaliada como True
. Como a condição agora é avaliada como False
, você sairá do loop while e continuará o programa se ele contiver mais código. Nesse caso, não há mais código e o programa será interrompido.
O exemplo acima é um pouco básico, mas você também pode incluir condicionais ou, em outras palavras, uma condição if, para torná-lo ainda mais personalizado. Dê uma olhada no exemplo a seguir:
# Take user input
number = 2
# Condition of the while loop
while number < 5 :
# Find the mod of 2
if number%2 == 0:
print("The number "+str(number)+" is even")
else:
print("The number "+str(number)+" is odd")
# Increment `number` by 1
number = number+1
The number 2 is even
The number 3 is odd
The number 4 is even
Agora, vamos praticar!
Escreva uma função collatz()
que permita ao usuário inserir um número inteiro em uma variável chamada number
. Se o número for par, você deverá imprimir o resultado de number/2
. Se o número for ímpar, então collatz()
deverá ser impresso e retornar 3 * number + 1
. O programa deve continuar chamando a função collatz()
no number
até que ele retorne um 1
.
Observe que essa é, na verdade, uma implementação da sequência de collatz, que, em resumo, é um problema matemático em que você escolhe um número e continua fazendo os cálculos acima até chegar ao resultado 1.
Abaixo, você pode encontrar a solução:
def collatz(number):
# Is the mod of 2 equal to 0?
if number % 2 == 0:
print(number // 2)
return number // 2
# If the mod of 2 isn't equal to 0, print `3 * number + 1`
elif number % 2 == 1:
result = 3 * number + 1
print(result)
return result
# Ask input from the user
n = input("Give me a number: ")
# As long as `n` is not equal to `1`, run `collatz()`
while n != 1:
n = collatz(int(n))
Give me a number: 5
16
8
4
2
1
Comece a aprender Python de graça
Python intermediário
Para o loop
Você pode lidar com o loop for da mesma forma que o loop while. Como você provavelmente já esperava, o componente "for" em "for loop" refere-se a algo que você faz por um determinado número de vezes.
Se você tiver em mente todos os itens acima, poderá definir facilmente o loop for da seguinte forma:
Um loop for é um conceito de programação que, quando implementado, executa um trecho de código repetidamente "para" um determinado número de vezes, com base em uma sequência.
Em contraste com o loop while, não há nenhuma condição ativamente envolvida - você apenas executa um trecho de código repetidamente por um determinado número de vezes. Em outras palavras, enquanto o loop while continua executando o bloco de código contido nele somente até que a condição seja True
, o loop for executa o código contido nele somente por um número específico de vezes. Esse "número de vezes" é determinado por uma sequência ou uma lista ordenada de coisas.
Você aprenderá mais sobre a diferença entre os loops while e for daqui a pouco, mas, por enquanto, concentre-se nos seguintes elementos necessários para criar um loop for:
- A palavra-chave
for
- Uma variável
- A palavra-chave
in
- A função
range()
, que é uma função integrada na biblioteca Python para criar uma sequência de números - O código que você deseja executar repetidamente
Loops For em Python
# Print "Thank you" 5 times
for number in range(5):
print("Thank you")
Thank you
Thank you
Thank you
Thank you
Thank you
Como você pode ver, os componentes que você viu na seção acima retornam nesse pequeno exemplo de um loop for em Python: a palavra-chave for
, a variável number
, a palavra-chave in
, a função range()
e o código que você deseja executar várias vezes, print("Thank you")
.
Isso não é tão difícil, certo?
Vamos considerar outro exemplo de um loop for, em que você usa duas variáveis para definir o fluxo de controle:
languages = ['R', 'Python', 'Scala', 'Java', 'Julia']
for index in range(len(languages)):
print('Current language:', languages[index])
Current language: R
Current language: Python
Current language: Scala
Current language: Java
Current language: Julia
Como você pode ver, você inicia o loop com a palavra-chave for
. Em seguida, você usa as variáveis index
e languages
, a palavra-chave in
e a função range()
para criar uma sequência de números. Além disso, você vê que também usa a função len()
nesse caso, pois a lista languages
não é numérica. O trecho de código que você deseja executar repetidamente é uma instrução de impressão, ou seja, print('Current language :', languages[index])
.
No loop acima, você quer expressar que, para cada índice no intervalo len(languages)
, você deseja imprimir a linguagem de programação de ciência de dados. Agora, len(languages)
é 5, portanto, a declaração também poderia ser reescrita como:
for index in range(5):
print('Current language:', languages[index])
Current language: R
Current language: Python
Current language: Scala
Current language: Java
Current language: Julia
E, mais uma vez, você obtém o mesmo resultado!
Loops While versus For em Python
Vamos revisitar o primeiro exemplo de loop while mais uma vez para determinar quais são exatamente as diferenças entre os loops while e for. Você já leu acima que a diferença está na condição que está ou não envolvida, mas como isso se reflete no código e como você pode alternar entre os dois?
# Take user input
number = 2
while number < 5 :
print("Thank you")
# Increment `number` by 1
number = number+1
Thank you
Thank you
Thank you
Você pode usar o loop for para imprimir a declaração "Thank you" de forma mais controlada:
# Print "Thank you" 3 times
for number in range(3) :
print("Thank you")
Thank you
Thank you
Thank you
Você viu como foi fácil converter o loop while em um loop for equivalente?
Como isso funciona, você pergunta? Bem, é simples.
Em um loop for, o número inteiro mencionado dentro da função de intervalo é o intervalo ou o número de vezes que o controle precisa fazer um loop e executar o código na cláusula do loop for.
Observe que a contagem da função range()
começa em 0 e não em 1. Isso significa que, no exemplo acima, a contagem deve ser como 0,1,2 e não 1,2,3. É assim que funciona a contagem de números na memória de um computador. Portanto, ao projetar um loop for, tenha sempre em mente que você deve considerar a contagem do intervalo a partir de 0 e não a partir de 1.
Dica: isso é o mesmo para listas em Python, por exemplo. Se você quiser saber mais sobre listas em Python, considere conferir o tutorial 18 Most Common Python List Questions (18 perguntas mais comuns sobre listas em Python ) do DataCamp.
Agora, há outra diferença interessante entre um loop for e um loop while. Um loop for é mais rápido do que um loop while. Para entender isso, você precisa analisar o exemplo abaixo.
import timeit
# A for loop example
def for_loop():
for number in range(10000) :
# Execute the below code 10000 times
sum = 3+4
#print(sum)
timeit.timeit(for_loop)
267.0804728891719
import timeit
# A while loop example
def while_loop():
i =0
while i<10000:
sum = 3+4
#print(sum)
i+=1
timeit.timeit(while_loop)
884.9233417965908
No trecho de código acima, você tem dois loops com cerca de 10.000 iterações. Ambos parecem iguais à primeira vista, até que você veja os bastidores e entenda como esses dois loops funcionam. Dica: a função timeit()
dá a você uma pista do que pode ser a diferença!
Lembre-se: todo o código Python é compilado com um compilador C, o que significa que o código que você vê acima é primeiro dividido em códigos de bytes e depois processado pelo compilador C subjacente.
Quando a execução do loop for no exemplo acima começa, o interpretador Python conversa com o compilador C subjacente e cria um objeto de lista de tamanho 10000. Em seguida, ele chama um iterador para tocar no índice de cada um dos 10.000 itens da lista.
A execução do loop while, por outro lado, não cria nenhum objeto de lista. De fato, o compilador C subjacente chama o operador de comparação booleana para a condição i<10000
9999 vezes.
Você já pode imaginar que iterar sobre um objeto de lista já criado com 10.000 elementos é mais fácil para o compilador do que executar uma operação booleana repetidamente por 9999 vezes; o desempenho de tempo de um loop for é melhor do que o de um loop while. Isso se reflete claramente no tempo de execução: o tempo para o loop for ser concluído é muito menor do que o tempo que o loop while precisa para ser concluído.
Agora, experimente o loop for! Observe que você deseja especificar o intervalo de 0 a 11, pois deseja exibir somente os números da sequência até 55, que é o 11º número da sequência.
Loops aninhados
Como você pode observar no exemplo acima, há uma condição if-else dentro do loop while que permite que você introduza outras condições no seu código.
Espere um pouco!
Essa não é a única maneira pela qual você pode personalizar seu loop. Você também pode incluir mais alguns loops while dentro do código existente, o que é conhecido como loop aninhado. Você pode modificar o exemplo acima para incluir outro loop while, como abaixo:
# Take user input
number = 2
# condition of the while loop
while number < 5 :
# condition of the nested while loop
while number % 2 == 0:
print("The number "+ str(number)+" is even")
No exemplo acima, há outro loop while que está "aninhado" dentro do loop externo, esse loop interno faz outra verificação para ver se o number % (mod) 2
é 0
.
Em outras palavras, ele verifica se o número é par e, em seguida, imprime a instrução "O número é par".
Mas há um problema: se você observar com atenção, verá que, como no código anterior, a instrução number=number+1
está faltando desta vez. Como você não está incrementando o número da variável em lugar algum, o valor da variável permanece o mesmo todas as vezes e o código entra em um loop infinito. Isso significa que, uma vez que você entra no loop, ele nunca sai e imprime a instrução um número infinito de vezes porque a variável number
sempre será definida como 2. Esse número é, obviamente, menor que 5 e um número par.
Vamos agora dar uma olhada em como seria um loop for aninhado:
# Print the below statement 3 times
for number in range(3) :
print("-------------------------------------------")
print("I am outer loop iteration "+str(number))
# Inner loop
for another_number in range(5):
print("****************************")
print("I am inner loop iteration "+str(another_number))
-------------------------------------------
I am outer loop iteration 0
****************************
I am inner loop iteration 0
****************************
I am inner loop iteration 1
****************************
I am inner loop iteration 2
****************************
I am inner loop iteration 3
****************************
I am inner loop iteration 4
-------------------------------------------
I am outer loop iteration 1
****************************
I am inner loop iteration 0
****************************
I am inner loop iteration 1
****************************
I am inner loop iteration 2
****************************
I am inner loop iteration 3
****************************
I am inner loop iteration 4
-------------------------------------------
I am outer loop iteration 2
****************************
I am inner loop iteration 0
****************************
I am inner loop iteration 1
****************************
I am inner loop iteration 2
****************************
I am inner loop iteration 3
****************************
I am inner loop iteration 4
O código acima é uma versão modificada do primeiro exemplo de loop for. Observe como um segundo loop for é usado dentro do loop externo.
Você pode executar o código.
Você verá que o controle entra no primeiro loop for e o valor da variável number
é inicializado como 0. A primeira instrução print é impressa e, em seguida, o controle entra no segundo loop for, em que o valor da variável another_number
é inicializado como 0
. A primeira instrução de impressão no segundo loop for é impressa uma vez.
Agora, o controle retorna ao loop for interno mais uma vez e o valor de another_number
é novamente inicializado para o próximo número inteiro, seguido pela impressão da instrução dentro da função print()
.
O processo mencionado acima continua até que o controle tenha passado pelo final da função range()
, que é 5 nesse caso, e então o controle retorna ao loop mais externo, inicializa a variável number
com o próximo número inteiro, imprime a instrução dentro da função print()
, visita o loop interno e repete todas as etapas acima até que a função range()
seja percorrida.
Essa jornada do controle viajando do loop mais externo, passando pelo loop interno e depois voltando ao loop for externo continua até que o controle tenha coberto todo o intervalo, o que é 3 vezes no seu caso.
Agora que você já leu algumas explicações sobre loops aninhados, é hora de começar! Escreva um programa Python para construir o seguinte padrão, usando um loop for aninhado:
break
e continue
Palavras-chave: Criando loops infinitos
Você pode usar break
e continue
em qualquer loop que criar. Essas palavras-chave não se limitam a quebrar loops infinitos intencionais, mas devem ser usadas com cuidado. Ambas as palavras-chave tornam mais difícil para as outras pessoas - inclusive para você mesmo, daqui a alguns meses, quando olhar para o seu código - entender o fluxo de controle no loop e onde a condição termina. Além disso, você não precisa usar as palavras-chave break
e continue
: como você viu até agora, você estava se saindo perfeitamente bem sem elas!
Entretanto, em alguns casos, pode ser mais claro escrever loops infinitos intencionais em vez dos tradicionais loops for e while que você viu até agora. É claro que, nesses casos, o uso dessas palavras-chave é incentivado!
Quebra e continuidade de loops while em Python
Felizmente, há uma maneira de sair da situação acima de loop infinito, que é usar a palavra-chave break
.
# Take user input
number = 2
# Condition of the while loop
while number < 5 :
# condition of the nested while loop
while number % 2 == 0:
print("The number "+str(number)+" is even")
break
number+=1
Quando você executa o código acima, ele não entra mais em um loop infinito.
"Que feitiçaria é essa!", você grita. - Eu digo para você relaxar, não é feitiçaria.
O que acontece é que, quando o controle encontra a palavra-chave break
, ele entende que precisa sair do loop (loop interno, nesse caso) e executa a próxima linha de código. Portanto, ele sai do loop while interno e prossegue para o loop externo, continuando a fazer seu trabalho normal até que a condição no loop while externo seja verdadeira.
Você deve considerar o fato de que uma linha de código deve existir após a palavra-chave break
, caso contrário, ela não terá nenhum efeito. Tente remover a linha de código após a palavra-chave break
no exemplo acima e, em seguida, execute o código.
E se você inserir a palavra-chave continue
após a declaração break
? Você pode seguir o código abaixo:
# Take user input
number = 2
while number < 5 :
while number % 2 == 0:
print("The number "+str(number)+" is even")
break
continue
number+=1
O código acima é uma versão ligeiramente modificada do exemplo da palavra-chave break
.
Quando você executar o código acima, encontrará novamente um loop infinito. Antes que você comece a arrancar os cabelos de frustração, dê uma olhada mais de perto. Você perceberá que há uma palavra-chave continue
após o intervalo. O que a palavra-chave continue
faz é transferir o controle de volta para o loop mais externo mesmo antes de a variável number
ser incrementada e, por isso, o código entra em um loop infinito.
Quebra e continuidade de loops for
E se você não quisesse executar o loop for interno no exemplo acima para todo o intervalo? Você pode usar a instrução break
de forma semelhante ao que fez no caso do loop while.
# Print the below statement 3 times
for number in range(3) :
print("-------------------------------------------")
print("I am outer loop iteration "+str(number))
for another_number in range(3):
print("****************************")
print("I am inner loop iteration "+str(another_number))
break
No exemplo acima, a palavra-chave break
após o loop interno instrui o controle a sair do loop interno, após o que o controle volta para o loop externo.
Execute o exemplo de código abaixo:
# Print the below statement 3 times
for number in range(3) :
print("-------------------------------------------")
print("I am outer loop iteration "+str(number))
continue
for another_number in range(3):
print("****************************")
print("I am inner loop iteration "+str(another_number))
break
No código acima, apenas o loop mais externo é executado e o controle nem sequer toca o loop interno.
"Por quê?", você pergunta.
Dê uma olhada mais de perto no código. Há uma palavra-chave continue
logo após a segunda instrução de impressão no loop mais externo. O que ele faz é instruir o controle a voltar para o loop for externo e começar de novo, e é por isso que o controle nunca toca no loop interno.
Ao contrário do loop while, você não precisa de um trecho de código após a palavra-chave break
no loop for. Um loop de interrupção sozinho funcionará muito bem dentro de um loop for.
range()
versus xrange()
Essas duas funções são semelhantes uma à outra, mas se você estiver usando o Python 3, terá apenas a função range()
disponível. No Python 3.x, a função xrange()
foi renomeada como range()
. Isso significa que, se você tentar usar a função xrange()
com o Python 3, receberá o erro NameError: name 'xrange' is not defined
.
Para entender como essas duas funções são semelhantes, considere o exemplo a seguir:
# Print the below statement 3 times
for number in range(5,10,2) :
print("I am number : "+str(number))
I am number : 5
I am number : 7
I am number : 9
Ao executar o código acima, você verá como o valor da variável number
é ignorado por um fator de 2, e isso se deve aos parâmetros da função range()
.
O primeiro parâmetro dessa função é o parâmetro de início. Esse é o ponto a partir do qual o controle começa a contar. O segundo parâmetro é o parâmetro de parada, que é o ponto em que o controle deve parar, e o último parâmetro é a função de etapa, que define o fator pelo qual o controle deve saltar durante a contagem.
Portanto, no caso acima, o controle começa em 5 e percorre o loop até 9, adicionando 2 a cada contagem. Isso significa 5, 5+2=7, 7+2=9.
Você aprendeu como a função range()
é usada para definir o número de vezes que o código deve fazer um loop. Agora, no Python 2.x, você também encontrará outra maneira de fazer isso, que é com a função xrange()
. Execute o código abaixo:
# Print the below statement 3 times
for number in xrange(10) :
print("I am number : "+str(number))
I am number : 0
I am number : 1
I am number : 2
I am number : 3
I am number : 4
I am number : 5
I am number : 6
I am number : 7
I am number : 8
I am number : 9
Que diferença você viu na saída do código acima em relação à saída do código sem a função xrange()
? Não há diferença?
É isso mesmo. Você não verá nenhuma diferença na saída do código.
Então, por que você deve usar a função xrange()
? Você verá isso um pouco mais adiante no tutorial. Primeiro, execute o código abaixo:
print(xrange(10))
print(range(10))
xrange(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Você pode ver que, na saída do código acima, há uma diferença na saída de ambas as instruções de impressão. Na instrução print, que contém a função xrange()
, você obtém a impressão do objeto da função xrange()
. Isso é diferente na instrução de impressão que tem a função range()
: lá, você obtém uma lista de números inteiros de 0 a 9.
Agora, é exatamente essa a diferença entre a função range()
e a função xrange()
.
Quando você define a função range()
, uma lista de todo o intervalo é armazenada na RAM e apresentada a você. No entanto, quando você define a função xrange()
, uma lista não é armazenada na memória. Em vez disso, a função xrange()
gera números inteiros em todo o intervalo quando você precisa. Dessa forma, a função xrange()
ajuda a conservar a memória em um sistema com poucos recursos.
Aprimore suas habilidades em Python!
Parabéns, você chegou ao final deste tutorial. Agora que você aprendeu a usar loops em Python, vá em frente e pratique. Quanto mais você praticar, melhor!
Cursos de Python relacionados
Course
Introdução ao Python
Course
Python intermediário
Course