Schleifenbeginn bei 0 oder 1?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Was ist besser? Sollte man Schleifen bei 0 oder 1 mit dem Zählen beginnen lassen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Oder du suchst den Kompromiss: 0.5
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

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)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: Gar nicht. Wo stellt sich diese Frage denn?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Diese Frage habe ich mir schon öfter gestellt.
Auf was bezieht sich "Gar nicht"?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

5 Antworten und niemand hat Why numbering should start at 0 verlinkt? Ich bin enttäuscht.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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‽
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Die Frage stellt sich hier:

Code: Alles auswählen

for i in range (1, anzahl_mannschaften+1):
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

An Dijkstras Artikel bezieht sich auf die Indizierung, nicht aber auf Ausgaben, die mit 1 beginnen, wie z.B. Ranglisten oder Rechnungsposten.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Oder gleich in `manschaftsnummer`, damit man nicht an einen Index in eine Liste denkt.
Antworten