Anfängerfrage: elif oder if

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
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

Hallo,

ich beginne gerade unter Python 3.8.0 programmieren zu lernen. Ich nutze dazu das Buch Python for Teenagers.

Im Buch steht ich soll bei mehreren if´s nur ein if und dann elif nutzen. Allerdings habe ich festgestellt, dass es gar kein Unterschied macht, ob ich if oder elif nutze. Mein Code funktioniert in jedem Fall. Gibt es eine Funktion von elif, die ich noch nicht kenne oder ist es einfach überflüssig?

Vielen Dank :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Beobachtung ist falsch. if/elif vs if/if hat einen entscheidenden Unterschied: im ersten Fall wird nach betreten eines positiven Zweiges die Verarbeitung beendet. Nicht so im zweiten Fall.

Code: Alles auswählen

zahl = 20
if zahl > 5: 
    print(zahl, "groesser 5!")
if zahl > 10:
    print(zahl, "groesser 10!")

if zahl > 5: 
    print(zahl, "groesser 5!")
elif zahl > 10:
    print(zahl, "groesser 10!")
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

Ich glaube meine Beobachtung war richtig. Allerdings ist der Beispielcode im Buch einfach schlecht, um die Bedeutung von elif zu erklären 🙄

Danke für Deinen Beispiel Code, er verdeutlicht den Unterschied 👍
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Beobachtung war richtig, ich hätte “Schlussfolgerung” sagen sollen. Und leider gibt es viel Ramsch da draußen was Bücher angeht. Gute kenne ich aber auch nicht, zu lange her das ich mit Python begonnen habe.
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

Hallo Deets,

erstmal frohe Weihnachten. Vielleicht kannst Du mir noch mal helfen? Diesmal geht es um "continue" in Loops. Ich erkenne auch hier den Sinn nicht. Vielleicht liegt es an dem Beispiel aus meinem Buch.

das hier:

Code: Alles auswählen

for i in range(10, 0,-1):
    print(i,"Mississippii!")

# When i is equal to 5, print some text, then continue with the countdown.

    if i==5:
        print("'Any last words, Wonder Boy?!?'")
        continue
liefert das gleiche Ergebnis, wie das hier:

Code: Alles auswählen

for i in range(10, 0,-1):
    print(i,"Mississippii!")

# When i is equal to 5, print some text, then continue with the countdown.

    if i==5:
        print("'Any last words, Wonder Boy?!?'")
Sieht in jedem Fall so aus:

10 Mississippii!
9 Mississippii!
8 Mississippii!
7 Mississippii!
6 Mississippii!
5 Mississippii!
'Any last words, Wonder Boy?!?'
4 Mississippii!
3 Mississippii!
2 Mississippii!
1 Mississippii!

Viele Grüße
Wombat
Benutzeravatar
sparrow
User
Beiträge: 4531
Registriert: Freitag 17. April 2009, 10:28

continue startet den nächsten Schleifendurchlauf.
Wenn es der letzte Befehl in der Schleife ist, wie bei dir, dann hat es keinen Effekt.
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

Cool, danke für die schnelle Hilfe, ich denke ich lege das Buch mal weg. Echt ärgerlich sowas.
Benutzeravatar
kbr
User
Beiträge: 1504
Registriert: Mittwoch 15. Oktober 2008, 09:27

Als ich mich für Python zu interessieren begann, habe ich das Buch von Mark Lutz „Learning Python“ genutzt. Von der ersten Auflage mit ca. 300 Seiten ist es inzwischen auf etwa 1600 Seiten angewachsen. Das der Autor gerne wortreich erklärt, zeichnete sich schon früher ab. Das Buch ist aber nicht deutlich teurer geworden; Du kriegst also mehr Papier für‘s Geld ;)
Vielleicht möchtest Du da mal reinschauen.
Benutzeravatar
__blackjack__
User
Beiträge: 14007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Zwischen der ersten Frage mit dem ``if``/``elif`` und der mit dem ``continue`` besteht ein IMHO nicht ganz unwichtiger Unterschied. Es gibt viele Fälle in denen ``if`` vs. ``elif`` keinen Unterschied im beobachteten Effekt haben, wo das ``elif`` aber Zeit spart weil Vergleiche die sowieso nicht wahr ergeben können nicht ausgeführt werden, und weil es auch der Dokumentation dient, dass der Leser gleich sieht das nur einer der Zweige ausgeführt wird. Ein ``continue`` an einer Stelle wo sowieso ein neuer Schleifendurchlauf ausgeführt wird, verkürzt dagegen weder die Laufzeit, noch hilft es dem Leser beim Verständnis des Codes.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

kbr hat geschrieben: Mittwoch 25. Dezember 2019, 00:20 Als ich mich für Python zu interessieren begann, habe ich das Buch von Mark Lutz „Learning Python“ genutzt. Von der ersten Auflage mit ca. 300 Seiten ist es inzwischen auf etwa 1600 Seiten angewachsen.
Danke für den Buchtipp. Was mich etwas irritiert, ist, dass das Buch mittlerweile 6 Jahre nicht aktualisiert wurde. Kann man die Entwicklungen von 3.3 (Stand des Buchs) auf 3.8 vernachlässigen?
MortalWombat
User
Beiträge: 19
Registriert: Sonntag 1. Dezember 2019, 15:02

__blackjack__ hat geschrieben: Mittwoch 25. Dezember 2019, 02:32 Zwischen der ersten Frage mit dem ``if``/``elif`` und der mit dem ``continue`` besteht ein IMHO nicht ganz unwichtiger Unterschied.
Das stimmt, ich bin da irgendwie in meinem eigenen Thema etwas off topic gekommen. 🙈
Benutzeravatar
kbr
User
Beiträge: 1504
Registriert: Mittwoch 15. Oktober 2008, 09:27

MortalWombat hat geschrieben: Mittwoch 25. Dezember 2019, 23:51 Danke für den Buchtipp. Was mich etwas irritiert, ist, dass das Buch mittlerweile 6 Jahre nicht aktualisiert wurde. Kann man die Entwicklungen von 3.3 (Stand des Buchs) auf 3.8 vernachlässigen?
Sicherlich fehlen dann neuere Features wie f-Strings, Dataclasses oder Assignment Expressions. Das halte ich aber für verschmerzbar. Python ist mittlerweile 30 Jahre alt und um die Sprache an sich zu lernen, halte ich das Buch von Mark Lutz nach wie vor für einen guten Begleiter.
Antworten