Como funciona a função Range ?
- #Python
Assim como toda função, Range é uma sequência de instruções que recebe uma entrada e produz uma saída. É claro que, se você não seguir as diretrizes da entrada, não será capaz de ter um resultado útil e, eventualmente, seu programa quebrará. Então vamos conhecer um pouco mais sobre essa função para evitar dores de cabeça.
Objetivo:
Sendo curto e grosso, serve para criar uma lista de valores numéricos sequenciada por um intervalo determinado pelo usuário, isto é, te permite obter um array que vai de 0 a 100 de dois em dois, por exemplo.
Funcionamento:
Para entender melhor, tenha em mente o seguinte laço while:
acumulador = 0
while acumulador < 10:
print(acumulador) # "valor registrado numa lista da função range"
acumulador += 1
Saída
0
1
2
3
4
5
6
7
8
9
Na primeira linha, definimos como zero o valor da variável acumulador e, na segunda, que o acumulador deve ser menor do que 10 como condição. Enquanto satisfeita, a instrução (impressão e incremento) se repetirá, nesse caso, 10 vezes, pois a acumulador é incrementado de um em um.
A função range é parecida, pois além de haver um acúmulo, há o seu registro em uma lista. Cada registro é definido pela instrução r[i] = start + step*i, em que por padrão o valor de start é 0 e step é 1, que pode ser vista no print (saída) do código acima. O último valor registrado será end-1, sendo end o segundo parâmetro da função range (caso o primeiro, start, seja omitido, o primeiro parâmetro será o end).
range(10) #o retorno será [0,1,2,3,4,5,6,7,8,9]
Então, o acumulador do laço while contou até 9 e, 9, é o último valor da lista da função range, pois toda lista de range termina quando o r[i+1] > end.
A variável acumulada ao fim do laço pode também ser alcançada assim:
len(range(0,10)) #resultado é 10
Sequências crescentes:
Para produzir basta inserir um número inteiro como parâmetro um (start) e outro maior como parâmetro dois (end)
range(2,7) #retorno será [2,3,4,5,6]
Determinando o intervalo:
Não está satisfeito que os números da sua lista pulem de um em um, ótimo! Eu tenho a solução, acrescente um terceiro parâmetro (step) para pularem de n em n vezes.
#se n=3
range(8,15,3) #retorno será [8,11,14]
Sequências decrescentes:
Bem sabemos contar de 3 à 1, basta dizer 3,2,1. Mas codificar isso, talvez não. É simples, utilize o terceiro parâmetro como um número negativo. Caso queira que recuem de -n em -n, faça o seguinte:
#se n=-1
range(3,0,-1) #retorno será [3,2,1]
Uso mais comum:
Você verá, ou já viu, seu uso em for loops, uma vez que o for do python itera sobre quaisquer valores de uma lista, seja strings, sejam números, que é o nosso caso.
Imagine um temporizador que contabilize 1 minuto. Um jeito muito direto de fazer isso é utilizando o método sleep da função time. Uma outra maneira é utilizando a função range, com seus três parâmetros abordados aqui.
import time
for i in range(60,0,-1):
print(i)
time.sleep(1) #equivale a um segundo
A vantagem de fazer dessa forma é que poderemos ver em qual segundo está o nosso temporizador, uma vez que, a cada segundo um número será printado em nosso terminal.
Possíveis erros
- Parâmetros não são números inteiros;
- Terceiro parâmetro é zero.
Conclusão
A função range serve para conseguir listas numéricas sequenciadas muito úteis para o laço for, pois uma instrução qualquer se repetirá de acordo com o comprimento do array criado.