Fala, devs! 🚀
Hoje vamos destrinchar um problema prático no Python que testa a nossa atenção e o entendimento matemático por trás dos argumentos da famosa função range().
Muitas vezes negligenciamos o básico, mas pequenos detalhes em limites de intervalos podem gerar bugs inesperados. Vamos entender como resolver isso sem errar?
O Problema
Imagine que temos o seguinte comando e precisamos prever a sua saída:
print(list(range(a - 1, b + a, a)))
Se definirmos as variáveis como a = 3 e b = 9, o resultado impresso será: [2, 5, 8, 11].
Vamos abrir o capô do Python e ver como o interpretador calcula isso passo a passo.
Anatomia da função range()
Antes de substituir os valores, precisamos lembrar a assinatura da função:
range(start, stop, step)
- start: O ponto de partida do intervalo (inclusivo).
- stop: O ponto de parada do intervalo (exclusivo).
- step: O passo/incremento entre cada número.
Substituindo os Valores (Passo a Passo)
Adotando os valores a = 3 e b = 9, fazemos as seguintes operações matemáticas para descobrir os argumentos:
-
Calculando o
start:- Expressão:
a - 1 - Cálculo:
3 - 1 = 2
- Expressão:
-
Calculando o
stop:- Expressão:
b + a - Cálculo:
9 + 3 = 12
- Expressão:
-
Calculando o
step:- Expressão:
a - Valor:
3
- Expressão:
O nosso comando final interpretado pelo Python será:
range(2, 12, 3)
Construindo a sequência:
- O primeiro elemento é o próprio start: 2
- Somamos o passo (3):
2 + 3 =5 - Somamos o passo (3):
5 + 3 =8 - Somamos o passo (3):
8 + 3 =11 - O próximo elemento seria
11 + 3 = 14. Como 14 ultrapassa o nosso limite máximo (12), a função encerra a execução.
Ao envelopar a função com list(), os valores são jogados para dentro de uma lista, gerando a saída exata: [2, 5, 8, 11].
E se o número final desse exatamente 12, ele seria impresso?
Não. Essa é a maior casca de banana do range().
No nosso exemplo prático, o próximo passo pulou de 11 para 14, então o 12 nem chegou a ser cogitado pela matemática do loop. Mas imagine um cenário hipotético onde a matemática fizesse o valor bater cravado no limite.
Por exemplo: range(0, 12, 3)
- Sequência: 0, 3, 6, 9...
- O próximo valor lógico seria 12.
Mesmo batendo cravado, o 12 NÃO seria impresso.
O parâmetro stop trabalha com o conceito de intervalo aberto à direita na matemática: [start, stop). Isso significa que o Python itera até o número imediatamente anterior ao limite estabelecido, mas nunca inclui o valor do stop dentro da sequência gerada.
Se você precisa que o número 12 apareça em uma sequência que vai de 3 em 3, o seu stop precisaria ser, no mínimo, 13.
Conclusão
Sempre que se deparar com a função range() em desafios de código ou no dia a dia, lembre-se da regra de ouro: o início entra, o fim nunca entra.
Gostou da explicação? Deixe um comentário dizendo se você já caiu na pegadinha do limite exclusivo do range! 🧑💻
Top comments (0)