Calma, vamos por partes…
Primeiro ponto é que está acontecendo uma confusão de variáveis ai… de forma global, a
começa com um float, o valor que foi inserido, depois disso você transforma essa variável, ainda globalmente, numa lista de booleanos onde cada bool indica se o valor inserido faz parte ou não de cada intervalo.
Tudo bem, essa solução pode te ajudar se quiser seguir nesse rumo, precisará depois pensar numa forma de descobrir qual o valor mínimo e máximo de cada intervalo ? vai, mas dá para seguir por ai sim…
O problema aqui é quando entra na função… Inicialmente, de forma local, o valor de a
seria o valor inserido globalmente (supondo que você chame a função com intervalos(a=a)
ou somente intervalos(a)
). Porém, quando você entra nesses loops o valor dessa variável se tornará o valor de dentro da lista em lista_intervalos
, então, a
assumirá um valor booleano (True ou False) de acordo com o elemento de lista_intervalos
.
Então, vamos simplificar um pouco as coisas. Para checar se o valor faz ou não parte do conjunto, isso ficará fora do loop, já que ele não precisa rodar cada elemento da lista.
Nas seguintes condições, lembre que return
irá finalizar a função e tudo vai parar nesse ponto… então, se a = -1
, por exemplo, assim que você chamar a função, a primeira coisa que vai acontecer é que o primeiro if
receberá um True e então vai executar print('Fora do intervalo')
seguido de um return
e a função acabará.
Agora, vamos pegar o primeiro laço for de fato, o que vai de 0 a 25:
se a = 5
(do input()
), então lista_intervalos
será [True, False, False, False]
, assim, o loop ficará assim por iteração:
1a iteração: if True in range(0,26):
→ O que retornará um True, já que, para o Python (True == int(1))
2a iteração: if False in range(0,26):
→ O que retornará um True, já que, para o Python (False == int(0))
3a iteração: if False in range(0,26):
→ O que retornará um True, já que, para o Python (False == int(0))
4a iteração: if False in range(0,26):
→ O que retornará um True, já que, para o Python (False == int(0))
Você reparou que a sua verificação deu pau ?
Tenta o seguinte, seguindo ainda a sua ideia de usar uma lista com os intervalos. Define a lista_intervalos
de fato com os intervalos:
lista_intervalos = [(0,25), (25,50), (50,75), (75,100)]
ai, dentro do loop, você pode verificar os intervalos 1 a 1:
for intervalo in lista_intervalos:
Assim você tem intervalo[0]
como o valor mínimo e intervalo[1]
como o valor máximo e pode comparar com intervalo[0] < a <= intervalo[1]
.