pętla for a krok

0

Cześć,
chcę zrobić pętlę for w przedziale (-1,1) z krokiem co 0.1, ale range przyjmuje tylko inty, po zaokrągleniu mam krok co 0...
zwiekszając argument x=x+0.1 nie działa niestety. ktoś ma jakiś pomysł?
przepraszam za trywialne pytania, jestem poczatkujacy.

0

Krok co 0.1 się nie sprawdzi do końca tak jak myślisz z powodu niedokładności liczb zmiennoprzecinkowych.
Nie będzie Ci lepiej po prostu dzielić przez 10?

0

Ja bym to zrobił o tak

for a in range(-10,10,1):
	a /= 10
	print(a)

edit:post wyżej już wspomniano o tym sposobie.

0
for a in xrange(21):
    print (a - 10) / 10.0
0

Dzięki wielkie :)!

0

A swoją drogą ciekawe dlaczego niedokładność reprezentacji liczb zmiennoprzecinkowych daje efekty przy dodawaniu, a nie daje przy dzieleniu przez 10.

from numpy import *

for n in arange(-1,1.000001,0.1):
    print(n)    
print(arange(-1,1.000001,0.1))
0

Dzielenie liczby całkowitej przez dziesięć i jego wielokrotności to zwykłe dopisanie do zmiennej gdzie wstawić przecinek, dużo prostsze od dodawania liczb zmiennoprzecinkowych

0

Ty tak poważnie?
x = 0,110 = 0,00011(0011)2
Gdzie wstawić przecinek w x/10?

0

@bogdans mysle ze chodzi o domyslne zaokraglenie metody __str__ klasy float, po wywolaniu:

for a in xrange(21):
    value = (a - 10) / 10.0
    print "%0.12f %0.18f" % (value, v`code> output:`-1.000000000000 -1.000000000000000000
-0.900000000000 -0.900000000000000022
-0.800000000000 -0.800000000000000044
-0.700000000000 -0.699999999999999956
-0.600000000000 -0.599999999999999978
-0.500000000000 -0.500000000000000000
-0.400000000000 -0.400000000000000022
-0.300000000000 -0.299999999999999989
-0.200000000000 -0.200000000000000011
-0.100000000000 -0.100000000000000006
0.000000000000 0.000000000000000000
0.100000000000 0.100000000000000006
0.200000000000 0.200000000000000011
0.300000000000 0.299999999999999989
0.400000000000 0.400000000000000022
0.500000000000 0.500000000000000000
0.600000000000 0.599999999999999978
0.700000000000 0.699999999999999956
0.800000000000 0.800000000000000044
0.900000000000 0.900000000000000022
1.000000000000 1.000000000000000000
0

Tak przy okazji xrange się nie stosuje, jest deprecated.

1

Skąd taki pomysł? W Pythonie 2 powinno się nawet stosować xrange, bo jest znacznie wydajniejsze, a w Pythonie 3 po prostu go nie ma i range działa jak xrange z Py2.

0

dokladnie, osobiscie poza paroma szczegolami wole 2.x i wlasnie jego uzywam

0

Range po prostu daje iterator, więc to nie jest kwestia "wydajności", nie tworzy fizycznie listy.

Natomiast range tworzy fizycznie całą listę. Zależnie co potrzebujemy, tego stosujemy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1