Python-Schleife über Gleitkommazahlen: for x in range() mit float statt int (Allgemeines)

Martin Vogel ⌂ @, Dortmund / Bochum, Tue, 19.06.2012, 16:26 (vor 4300 Tagen)

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:

 RSS-Feed dieser Diskussion

powered by my little forum