Seite 1 von 1

Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 17:12
von Bill987654321
Was ist besser? Sollte man Schleifen bei 0 oder 1 mit dem Zählen beginnen lassen?

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 17:19
von __deets__
Das kommt darauf an, was du dann damit machen willst. Willst du an das erste Element einer Liste? Dann wohl besser von 0. Willst du eine Liste von Bundesliga-Plaetzen darstellen? Die fangen halt bei 1 an. Willst du gar beides? Dann benutzt du einfach enumerate(liste, start=1) und gut ist.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 17:24
von pillmuncher
Oder du suchst den Kompromiss: 0.5

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 17:51
von kbr
pillmuncher hat geschrieben: Dienstag 31. März 2020, 17:24 Oder du suchst den Kompromiss: 0.5

Code: Alles auswählen

def enumerate(iterable, start=0.5):
    for item in iterable:
        yield start, item
        start += 1
8)

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 20:23
von __blackjack__
@Bill987654321: Gar nicht. Wo stellt sich diese Frage denn?

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 20:50
von Bill987654321
Diese Frage habe ich mir schon öfter gestellt.
Auf was bezieht sich "Gar nicht"?

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 21:19
von DasIch
5 Antworten und niemand hat Why numbering should start at 0 verlinkt? Ich bin enttäuscht.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Dienstag 31. März 2020, 21:35
von __blackjack__
Bill987654321: Gar nicht bezieht sich auf Schleifen über Zahlen. Die sollte man gar nicht beginnen lassen. Weder bei 0 noch bei 1. Es gibt relativ wenige Fälle wo man eine Schleife über Zahlen braucht. Da ist die erste Frage braucht man sie *wirklich*. In den Fällen wo man sie wirklich braucht stellt sich dann aber die Frage nach 0 oder 1 nicht, denn man braucht die ja entweder gar nicht die Zahlen, sondern nur die Wiederholungen, dann ist es egal ob mit 1 oder 0, oder man braucht die Zahl für einen Zweck, und der legt dann ja fest ob 1 oder 0. Also wo stellt sich diese Frage *wirklich* ganz konkret? Also so das die Verwendung das nicht schon sinnvoll klärt‽

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Mittwoch 1. April 2020, 08:12
von Bill987654321
Die Frage stellt sich hier:

Code: Alles auswählen

for i in range (1, anzahl_mannschaften+1):

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Mittwoch 1. April 2020, 08:25
von Sirius3
Hier stellt sich die Frage, ob Du gerne "Bitte 1. Mannschaftsnamen eingeben:" oder "Bitte 0. Mannschaftsnamen eingeben:" ausgegeben haben möchtest.
Ich glaube, die meisten Menschen sind die erste Variante gewohnt.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Mittwoch 1. April 2020, 09:05
von kbr
An Dijkstras Artikel bezieht sich auf die Indizierung, nicht aber auf Ausgaben, die mit 1 beginnen, wie z.B. Ranglisten oder Rechnungsposten.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Mittwoch 1. April 2020, 10:26
von DeaD_EyE
Bill987654321 hat geschrieben: Mittwoch 1. April 2020, 08:12 Die Frage stellt sich hier:

Code: Alles auswählen

for i in range (1, anzahl_mannschaften+1):
Das ist ein Anti-Pattern. Bei solchen Code-Beispielen sieht man direkt, dass derjenige Konzepte aus anderen Sprachen auf Python anwendet.

Ob ein Index bei 0 oder bei 1 anfängt, ist eine Frage der Definition.
In Matlab fängt es bei 1 an. In den wichtigen Sprachen bei 0.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Mittwoch 1. April 2020, 10:53
von Sirius3
@DeaD_EyE: wenn Du in den anderen Thread des OPs schaust, dann siehst Du, dass das eine Schleife ist, um 4 mal per `input` etwas einzugeben, also Ausnahmsweise kein Anti-Pattern.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Donnerstag 2. April 2020, 08:52
von DeaD_EyE
Ok, solange er nicht auf eine Liste zugreift, um die Namen auszugeben, ist das natürlich in Ordnung.
Den Namen `i` könnte man in `index` oder `idx` oder was anderes umbenennen.
Kleinigkeiten, die einem helfen den eigenen Code nach einem Jahr noch zu verstehen.

Re: Schleifenbeginn bei 0 oder 1?

Verfasst: Donnerstag 2. April 2020, 08:56
von Sirius3
Oder gleich in `manschaftsnummer`, damit man nicht an einen Index in eine Liste denkt.