Fehler bei der Funktion raw_input()

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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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?
http://www.kinderpornos.info
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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

er nutzt jetzt seit 3h python, wie soll er bitte diesen code verstehen?
http://www.kinderpornos.info
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

@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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Thundersystem hat geschrieben:Nur else if, was tut das?
Ganz einfach: es gibt kein "else if".
Das Leben ist wie ein Tennisball.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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
http://www.kinderpornos.info
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

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 :)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Das gibt es, nur heißt es eben ``elif``.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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:

Code: Alles auswählen

stmt = ...
        | If(expr test, stmt* body, stmt* orelse)
Das lässt nur einen else-Block zu.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

Jo ok Danke, hab das denke ich nun soweit verstanden ;)

BIn ja mittlerweile auch schon beim öffnen, überschreiben und lesen von Dateien :)

Greetz
Andreas ;)
Methos
User
Beiträge: 2
Registriert: Dienstag 9. Juni 2009, 13:59

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.
Antworten