Seite 2 von 2
Verfasst: Montag 8. Juni 2009, 12:31
von Dill
Thundersystem hat geschrieben:
Nur hängt er das was in "else" steht jedesmal noch mit unten dran.
Blöderweise weis ich jetzt aber nicht woran das liegt!
"jedesmal" stimmt nicht. wenn die 4. bedingung zutrifft wird das else nicht betreten. klar?
Verfasst: Montag 8. Juni 2009, 12:42
von BlackJack
Habe gerade mal auf die Seite mit der Aufgabe geschaut. Namen durchnummerieren und empfehlen mit Kopieren und Einfügen zu arbeiten, weil man sich dann viel Tipparbeit sparen kann, ist IMHO nicht so toll. So etwas sollte man gar nicht erst anfangen, dann braucht man es sich später auch nicht wieder abgewöhnen.
Die Aufgabe ist IMHO auch schlecht um Verweigungen zu zeigen, denn eine so regelmässige Tabelle, die eine Kombination von Zuständen auf eine Ausgabe abbildet, würde man natürlicher mit einer Abbildung lösen und nicht mit Unmengen an ``if``\s.
Code: Alles auswählen
recommendations = {
'sss': 'Pack die Badehose ein, nimm dein kleines Schwesterlrein...',
'sfw': 'Hei, Hei, Hei, so eine Schneeballschlacht...',
'ffs': "I'm singing in the rain...",
'fsw': 'Leise rieselt der Schnee...' }
questions = ['Luftdruck (steigt / faellt)',
'Lufttemperatur (steigt / faellt)',
'Jahreszeit (Sommer / Winter)']
answers = ''.join(raw_input(q + ': ')[:1].lower() for q in questions)
print recommendations.get(answers, 'Nichts Genaues weiss man nicht!')
@Thundersystem: Das ``else`` bezieht sich nur auf das letzte ``if`` oder ``elif``, nicht auf irgendwelche ``if``\s davor. Das ist auch nicht komisch bei Python, sondern in den meisten Programmiersprachen so, die ein imperatives ``if``/``else``-Konstrukt kennen.
Verfasst: Montag 8. Juni 2009, 12:45
von Dill
er nutzt jetzt seit 3h python, wie soll er bitte diesen code verstehen?
Verfasst: Montag 8. Juni 2009, 12:54
von Thundersystem
@confi
Du bist genial, kaum sind die Klammern weg funzt alles, also Klammern habe ich nur bei if, bei elif gar nichts und bei else nen Doppelpunkt, richtig
@BlackJack
Ehm ja das ehm blick ich jetzt ned ganz, aber ok ich versteh jetzt auch wiso mein Code nicht funktionieren hat können, da das mit den ganzen ifs nur funzt wenn ich kein else dabei hätte, also jo, eine Frage hätte ich noch ich weis nun was if, else und elif bewirken.
Nur else if, was tut das?
Verfasst: Montag 8. Juni 2009, 12:57
von EyDu
Thundersystem hat geschrieben:Nur else if, was tut das?
Ganz einfach: es gibt kein "else if".
Verfasst: Montag 8. Juni 2009, 12:59
von Dill
es gibt kein else if in python, nur das:
Code: Alles auswählen
if foo::
pass
elif bar:
pass
else:
if baz:
pass
if foo:
pass
else if bar: #syntax error
pass
Verfasst: Montag 8. Juni 2009, 13:00
von cofi
Thundersystem hat geschrieben:@confi
Du bist genial, kaum sind die Klammern weg funzt alles, also Klammern habe ich nur bei if, bei elif gar nichts und bei else nen Doppelpunkt, richtig
Nein, vergiss die Klammern bei jeglichen Vergleichen( es sei denn du willst mit Tupeln arbeiten).
BlackJack bildet mit dem Dictionary eine switch Anweisung nach. Aber das ist - zumindest in dem Ausmaß - fortgeschrittenes Niveau
P.S. Ich verbitte mir das `n`, das zerstört die Verballhornung :O
Verfasst: Montag 8. Juni 2009, 13:17
von Thundersystem
Klip hat geschrieben:Code: Alles auswählen
if x == y:
# mach was
else if x != y:
# mach was anderes
else:
# wenn gar nichts davon zutrifft...
Anstelle eines einfachen if's solltest du da eher ein 'else if' verwenden.
Ok, das verwirrte mich dann eben, weil laut Klip gibt es eben else if

Verfasst: Montag 8. Juni 2009, 13:34
von birkenfeld
Das gibt es, nur heißt es eben ``elif``.
Verfasst: Montag 8. Juni 2009, 15:48
von Pascal
nochmal etwas zu else, if & elif:
Code: Alles auswählen
x=10
y=5
if x == y:
print x , 'ist' , y
elif x > y:
print x , 'ist groesser als' ,y
elif x < y:
print x , 'ist kleiner als', y
else:
print
# ist das gleiche wie
if x == y:
print x , 'ist' , y
else:
if x > y:
print x , 'ist groesser als' ,y
else:
if x < y:
print x , 'ist kleiner als', y
else:
print
sicher fällt dir auf, dass der beides mal das gleiche kommt, egal welche werte du für x oder y eingibst.
es ist nicht schwer zu erkennen, dass der erste Code übersichtlicher, eleganter, praktischer,... ist.
wenn du in den else-zweig wieder ein if einbaust hat das den gleiche effekt wie elif
Verfasst: Montag 8. Juni 2009, 16:01
von birkenfeld
Pascal hat geschrieben:
wenn du in den else-zweig wieder ein if einbaust hat das den gleiche effekt wie elif
Und wenn man sich den AST anschaut, sieht man, dass das intern auch genau in diese Form überführt wird:
Das lässt nur einen else-Block zu.
Verfasst: Dienstag 9. Juni 2009, 08:51
von Thundersystem
Jo ok Danke, hab das denke ich nun soweit verstanden
BIn ja mittlerweile auch schon beim öffnen, überschreiben und lesen von Dateien
Greetz
Andreas

Verfasst: Mittwoch 10. Juni 2009, 08:29
von Methos
Wenn eine der ersten drei Bedingungen erfüllt wurde, dann ist die vierte automatisch falsch, und wenn diese falsch ist, wird deren else- Zweig ausgeführt.