Python-Schleife über Gleitkommazahlen: for x in range() mit float statt int (Allgemeines)
In Python dürfen for-Schleifen, die den Iterator range() verwenden, bekanntlich nur über ganzzahlige Werte laufen. Im Grunde ist das eine total überflüssige Einschränkung dieses Iterators, denn er könnte ja eigentlich genausogut auch Gleitkommazahlen liefern. In einer der aktuellen Hausaufgaben entdeckte ich gerade die nette Idee, eine for-Schleife mittels einer eigenen Funktion f_range() über eine Liste von Gleitkommazahlen iterieren zu lassen.
Im Grunde könnte man analog dazu auch einen eigenen Iterator basteln, der sich genauso verhält wie range(), nur dass er eben float-Werte statt int-Werte zurückgibt.
Wer while-Schleifen nicht mag, kann damit also auch so etwas schreiben wie
for x in f_range(0.5, 12.73, 3.14):
print(x)
Die Funktion f_range() würde dann beispielsweise so aussehen:
def f_range(von=0, bis=None, schritt=1):
if bis is None:
von, bis = 0, von
f = von
if schritt > 0:
while f < bis:
yield(f)
f += schritt
else:
while f > bis:
yield(f)
f += schritt
Die Methoden count() und index() der Originalfunktion sind hier nicht implementiert, da ich sie bei Gleitkommazahlen für hochgradig unsinnig halte.
--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums
Bücher:
CAD mit BricsCAD
Bauinformatik mit Python
gesamter Thread: