Comecemos pela solução.
01.
def
float_range(n1,n2
=
None
,n3
=
1.0
):
02.
"""
03.
Range para funcionar com números em vírgula flutuante.
04.
Pode ser chamado como:
05.
float_range(n)
06.
float_range(n1,n2)
07.
float_range(n1,n2,n3)
08.
O significado é o mesmo do range normal.
09.
"""
10.
11.
if
n2
=
=
None
:
12.
n2
=
float(n1)
13.
n1
=
0.0
14.
proximo
=
n1
15.
while
(n3 >
=
0.0
and
proximo <
=
n2)
or
(n3 <
0.0
and
proximo >
=
n2):
16.
yield
proximo
17.
proximo
=
proximo
+
n3
Código estranho, não e? Sobretudo aquela instrução yield. O programa que escrevemos produz um objecto do tipo gerador. Cada vez que lhe peço, isto é chamo o comando, dá-me o próximo elemento de uma dada sequência. Neste caso, o próximo número da sequência entre n1 e n2, com incrementos de n3. Além disso, os parâmetros formais da definição têm valores por defeito! Assim, funciona para os três casos que conhecemos. Executando o código:
01.
print
'Forma geral'
02.
for
i
in
float_range(
1.0
,
2.6
,
0.3
):
03.
print
i
04.
print
'Forma geral inversa'
05.
for
i
in
float_range(
2.6
,
1.0
,
-
0.3
):
06.
print
i
07.
print
'Forma Simples'
08.
for
i
in
float_range(
4.3
):
09.
print
i
10.
print
'Forma intermédia'
11.
for
i
in
float_range(
2.5
,
4.3
):
12.
print
i
obtemos como resultado:
01.
Forma geral
02.
1.0
03.
1.3
04.
1.6
05.
1.9
06.
2.2
07.
2.5
08.
Forma geral inversa
09.
2.6
10.
2.3
11.
2.0
12.
1.7
13.
1.4
14.
1.1
15.
Forma Simples
16.
0.0
17.
1.0
18.
2.0
19.
3.0
20.
4.0
21.
Forma intermédia
22.
2.5
23.
3.5
Como vemos podemos usar o novo comando em ciclos for. Mas, e se quisermos os elementos em bloco, numa lista por exemplo. Uma solução fácil é a seguinte:
1.
def
float_range_lista(n1,n2
=
None
,n3
=
1.0
):
2.
"""
3.
Baseia-se em float_range
4.
"""
5.
x
=
float_range(n1,n2,n3)
6.
y
=
list(x)
7.
return
y
Experimente agora fazer:
1.
print
float_range_lista(
1.0
,
2.6
,
0.3
)
e veja o que acontece. Espero que não tenha pesadelos. Mas se quiser sonhar, tente usar este princípio para gerar os números da sequência de Fibonacci. Se não sabe o que é ... procure através do Google!
muito Bom seu blog , ajudou bastante !!!
ResponderEliminarJosé de Alencar, obrigado pelo seu comentário. O blogue tem andado um pouco ... morto. A partir de finais de Setembro espero poder retomar a escrita.
ResponderEliminarMuito bom, estarei esperando novidades vlw
ResponderEliminar