Problem bei ersten Script

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.
zaine
User
Beiträge: 7
Registriert: Freitag 24. April 2009, 15:52

Freitag 24. April 2009, 16:55

Hallo ihr :).

In Informatik arbeiten wir mit Python jetzt das erste mal und sollen ein kleines Programm schreiben. Aufgabe:

Es sollen 2 Fragen nacheinander gestellt werden, die mit JA oder NEIN beantwortet werden. Dementsprechend soll dann eine Antwort ausgegeben werden.

Das fand ich aber etwas primitiv und habe deshalb den Script so erweitert, das immer, wenn etwas anderes als JA oder NEIN eingegeben wird, dies auch gemeldet wird und die Fragen wiederholt werden.

Sind die Eingaben korrekt, soll die entsprechende Antwort erscheinen und danach soll angeboten werden, den Script zu wiederholen, um die Antworten schneller durchzutesten.

So, Problem ist jetzt nur, das der Script nicht vollständig funktionert. Manchmal funktionieren die Bedingungen, manchmal nicht. Da ich noch nicht viel Ahnung vom programmieren habe (und auch im Tutorial auf die Schnelle nichts gescheites dazu gefunden habe), wäre es nett, wenn jemand den Code korrigieren würde und mir erklärt, was ich falsch gemacht habe.

Hier der Code:

Code: Alles auswählen

whd = ""
while whd != "NEIN":
 print ("---------------------------------------------------------------")
 print ("Abfrageprogramm zur Freizeitgestaltung der männlichen Schöpfung")
 print ("---------------------------------------------------------------")
 print ("Bitte nur mit JA oder NEIN antworten.")
 print ("(Andere Eingaben werden NICHT akzeptiert!)")
 print ("")
 wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
 freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
 while wetter or freundin != "JA" or "NEIN":
   print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
   print "(Nur in Großbuchstaben JA oder NEIN eingeben!)"
   print ""
   wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
   freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")

   if wetter == "JA" and freundin == "NEIN":
    print "Dann geh jetzt zum Fußballspiel."
    whd = raw_input ("Wiederholen? (JA/NEIN): ")
    break
    
   if wetter == "JA" and freundin == "JA":
    print "Am Besten gehst du spazieren."
    whd = raw_input ("Wiederholen? (JA/NEIN): ")
    break
    
   if wetter == "NEIN" and freundin == "NEIN":
    print "Wenn du schon alleine bist, solltest du ein Buch lesen."
    whd = raw_input ("Wiederholen? (JA/NEIN): ")
    break
    
   if wetter == "NEIN" and freundin == "JA":
    print "Dann ab mit dir in das Kino!"
    whd = raw_input ("Wiederholen? (JA/NEIN): ")
    break
problembär

Freitag 24. April 2009, 17:09

Code: Alles auswählen

while wetter or freundin != "JA" or "NEIN":
:lol: Diese Zeile prüft:

1. Ist wetter wahr, das heißt nicht "", False oder 0 usw..
oder
2. ist freundin ungleich "JA"
oder
3. ist "NEIN" wahr (also immer, da "NEIN" nicht "", False oder 0 usw. ist).

Nicht ganz, was Du gewollt hattest ...

Gruß

P.S.: Bitte benutze 4 Leerzeichen pro Einrückung.
zaine
User
Beiträge: 7
Registriert: Freitag 24. April 2009, 15:52

Freitag 24. April 2009, 18:11

Erstmal danke für die Antwort.

Wie kann ich denn in der Schleife einstellen, das freundin bzw. wetter JA oder NEIN sein müssen?
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Freitag 24. April 2009, 18:16

Außerdem kannst du den Code deutlich vereinfachen. Den String "Wiederholen?..." kannst du in einer Variable ablegen. Die ganzen prints brauchst du nicht unbedingt, du kannst mittels drei " oder ' einen Multiline String ausdrucken bzw in einer Variable ablegen. Also zb so:

Code: Alles auswählen

einleitungs_text = """Abfrageprogramm zur Freizeitgestaltung ....

Hier beginnt die dritte Zeile.

"""

print einleitungs_text
Sofern du schon Funktionen und allgemeine Datenstrukturen wie Wörterbücher / Dictionaries kennst, kannst du das Programm auch deutlich vereinfachen.

Zu deinem anfänglichen Problem noch: Du darfst dir eine Bedingung nicht so vorstellen, das "wetter or freundin == "JA"" beide Variablen nimmt und sie überprüft. Du musst schon explizit für jede Variable die Bedingung festlegen, "or" und "and" werden zur zum Verknüpfen mehrer Wahrheitswerte verwendet. Also musst du das auch immer so machen, wie du es in den if Abfragen machst.

EDIT:
Wie kann ich denn in der Schleife einstellen, das freundin bzw. wetter JA oder NEIN sein müssen?

Code: Alles auswählen

while (wetter == "JA" or wetter == "NEIN") or (freundin == "JA" or freundin == "NEIN"):
Ich glaube aber, du meinst, das beide wahr sein sollen? Dann musst du statt dem zentralen "or" and benutzen.

Hier ein paar fortschrittlichere Varianten:

Code: Alles auswählen

antwortmoeglichkeiten = ("JA", "NEIN")
while wetter in antwortmoeglichkeiten or freunding in antwortmoeglichkeiten:

Code: Alles auswählen

antwortmoeglichkeiten = ("JA", "NEIN")
while all(antwort in antwortmoeglichkeiten for antwort in (wetter, freundin)):
Das zweite wirst du aber als Einsteiger noch nicht verstehen / brauchen.
Zuletzt geändert von str1442 am Freitag 24. April 2009, 18:22, insgesamt 1-mal geändert.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Freitag 24. April 2009, 18:17

Edit: Ist nach str1442's edit überflüssig geworden, aber Deins war besser.

Hi,

Code: Alles auswählen

>>> freundin="JA"
>>> freundin in ["JA","NEIN"]
True
>>> freundin="Hallo!"
>>> freundin in ["JA","NEIN"]
False
Hilft Dir das beim selber lösen?

Im Grund hast Du doch eine Liste mit möglichen Antworten. Die Antwort auf die Freundin-Frage muss in dieser Liste sein und die Antwort auf die Wetter-Frage muss in dieser Liste sein.

Gruß,
Bernhard
problembär

Freitag 24. April 2009, 18:40

@Bernhard: Wenn Du Listen nicht verändern willst, nimm' lieber Tupels: Werden in der Regel schneller verarbeitet.

Ansonsten: Hmm, immer noch uncool:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

def getAnswer(question):

    possibleanswers = ("JA", "NEIN") 

    answer = raw_input(question)

    retval = ["", 0]

    if answer in possibleanswers:
        retval[0] = answer 
        retval[1] = 1 
    else:
        retval[0] = "" 
        retval[1] = 0

    return retval


def checkResult(wetter, freundin):

    advices = ("Wenn du schon alleine bist, solltest du ein Buch lesen.",
               "Dann geh jetzt zum Fußballspiel.",
               "Dann ab mit dir in das Kino!",
               "Am Besten gehst du spazieren.")

    res = ["0", "0"]

    if wetter == "JA":
        res[1] = "1"

    if freundin == "JA":
        res[0] = "1"

    print advices[int("".join(res), 2)]

    return raw_input("Wiederholen? (JA/NEIN): ")


whd = ""

while whd != "NEIN":

    print "---------------------------------------------------------------"
    print "Abfrageprogramm zur Freizeitgestaltung der männlichen Schöpfung"
    print "---------------------------------------------------------------"
    print "Bitte nur mit JA oder NEIN antworten."
    print "(Andere Eingaben werden NICHT akzeptiert!)"
    print

    first = True

    questions = ("Ist draußen denn gerade schönes Wetter? ",
                 "Und hat deine Freundin momentan Zeit für dich? ")
    ok = 0

    while ok < 2:

        if not first:

            print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
            print "(Nur in Großbuchstaben JA oder NEIN eingeben!)"
            print

        first = False

        answers = []

        for i in questions:
            answers.append(getAnswer(i))

        wetter = answers[0][0]
        freundin = answers[1][0]

        for i in answers:
            ok += i[1]

    whd = checkResult(wetter, freundin)
Gruß
zaine
User
Beiträge: 7
Registriert: Freitag 24. April 2009, 15:52

Freitag 24. April 2009, 18:50

@All: Danke^^

@Problembär: Oh nein, das ist viel zu kompliziert. Wir kennen erst raw_input und print, ich selber arbeite erst seit einer halben Stunde mit Python. Sowas kommt später^^.

@Bernhard: Danke, jetzt habe ich es verstanden.

@str1442:

Jetzt sieht es bei mir so aus:

Code: Alles auswählen

antworten = ("JA", "NEIN")
whd = ""
while whd != "NEIN":
     print ("---------------------------------------------------------------")
     print ("Abfrageprogramm zur Freizeitgestaltung der männlichen Schöpfung")
     print ("---------------------------------------------------------------")
     print ("Bitte nur mit JA oder NEIN antworten.")
     print ("(Andere Eingaben werden NICHT akzeptiert!)")
     print ("")
     wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
     freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
     while wetter in antworten and freundin in antworten:

         if wetter == "JA" and freundin == "NEIN":
             print "Dann geh jetzt zum Fußballspiel."
             whd = raw_input ("Wiederholen? (JA/NEIN): ")
             break
    
         if wetter == "JA" and freundin == "JA":
             print "Am Besten gehst du spazieren."
             whd = raw_input ("Wiederholen? (JA/NEIN): ")
             break
    
         if wetter == "NEIN" and freundin == "NEIN":
             print "Wenn du schon alleine bist, solltest du ein Buch lesen."
             whd = raw_input ("Wiederholen? (JA/NEIN): ")
             break
    
         if wetter == "NEIN" and freundin == "JA":
             print "Dann ab mit dir in das Kino!"
             whd = raw_input ("Wiederholen? (JA/NEIN): ")
             break

     else:
            print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
            print "(Nur in Großbuchstaben JA oder NEIN eingeben!)"
            print ""
            wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
            freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
Das Symptom ist allerdings immernoch das gleiche wie vorhin =/.

Also, nochmal zur Erklärung:

Der Benutzer soll 2 Fragen hintereinander mit JA oder NEIN beantworten. Schreibt er etwas anderes, zum Beispiel JAPADAPADU, soll die Schleife aktiviert werden, damit der Benutzer auf seinen Fehler hingewiesen wird und die Fragen erneut gestellt werden.

Die Schleife soll sich also nur dann aktivieren, wenn bei wetter oder freundin weder JA noch NEIN eingegeben werden, sonst nicht. Das Problem ist, das sich die Schleife manchmal auch dann aktiviert, wenn 2x korrekte Antworten gegeben werden. Diesen Fehler möchte ich nur korrigieren, so einfach wie möglich.

EDIT: Ich möchte nicht von euch meine Hausaufgaben gelöst bekommen, ich würde nur gerne wissen, warum es bei mir nicht funktioniert.^^ Denn der eigentliche Script (2 Fragen + die 4 Antwortmöglichkeiten) funktioniert reibungslos.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Freitag 24. April 2009, 19:26

@zaine: Dann musst du einfach beide Abfragen negieren:

Code: Alles auswählen

while wetter not in antworten or freundin not in antworten:
Das liest sich dann als "Solange wetter nicht in antworten ist oder freundin nicht in antworten ist, tue: ..."

@problembär:

Dein Code hat ein paar Probleme. retval sollte wenn schon ein Tupel sein, da eine Liste impliziert, das die einzelnen Daten mehr oder weniger gleich sind und keine besondere Bedeutung haben. Du benutzt die Liste aber um eine Antwort / einen leeren String und einen Wahrheitswert zu definieren. Warum benutzt du 0 und 1 als Wahrheitswert an der Stelle? Warum gibst du überhaupt die Antwort zurück und nicht nur den Wahrheitswert? Nur damit du nochmal explizit auf Ja oder Nein in checkResult prüfen kannst? Das ist unnötige Kopplung. Gleichzeitig benutzt du den "Wahrheitswert" aus getAnswer, der wohl doch keiner sein soll, um "ok" hochzuzählen. Also soll dieser Wert angeben, ob eine valide Antwortmöglichkeit übergeben wurde. Warum sollte getAnswer soetwas zurückgeben? Warum gibt getAnswer nicht einfach nur True / False als Wahrheitswert zurück? Das ist so direkt nicht ersichtlich. mit "ok < 2" "hardcodierst" du wiederrum die Anzahl an Fragen fest in die Schleife.

Die Lösung mittels 2 Bit, die Wahrheitswerte angeben, als int zu interpretieren und dann zu benutzen ist zwar kreativ, erinnert aber an eine "C" Heransgehensweise. Will man ein solches Programm besser ausbauen, könnte man einen binären Baum verwenden, der die jeweiligen Antworten als Blätter-Knotenobjekt enthält. Drückt imho den Zweck besser aus.

Warum sind advices und possibleanswers keine globalen Konstanten?

Dann noch PEP8 und eventuell weniger Leerzeilen. Normalerweise stellen die Leerzeilen eine Art logischen Abschnitt dar; alles, was ohne Leerzeilen geschrieben wird, gehört irgendwie zusammen. So würde ich bei while und if keine Leerzeilen setzen. Nach "def" auch nicht. Und raw_input sollte man eigentlich nur auf der höchsten Ebene benutzen und die Werte dann in die Funktionen runterreichen, anstatt einfach mitten in der Funktion raw_input zu verwenden. Aus dem gleichen Grund, aus dem man nicht einfach sys.exit in einer Funktion benutzen sollte.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Freitag 24. April 2009, 19:30

Hallo zaine,

erstmal Glückwunsch: Dein Code ist viel übersichtlicher geworden. Dennoch hast Du anscheinend den Überblick darüber verloren: Du willst ein und denselben Ablauf immer wieder wiederholen bis jemand sagt, dass er keine Wiederholung mehr will.
Wenn Du nur einen Vorgang wiederholen willst, warum hast Du dann zwei "while"-Schleifen? Geht das nicht auch mit einer?
Warum hast Du so oft den gleichen Code der fragt, ob nochmal wiederholt werden soll, obwohl der sich doch auch bei jedem Durchlauf wiederholt? Kann man den nicht irgendwo ein einziges Mal in die Schleife schreiben? Zum Beispiel an deren Ende, wenn es sich entscheidet, ob sie neu durchlaufen wird?
Mach Dir nochmal die Struktur klar und schreib neuen guten Ablaufcode anstatt an dem alten festzuhalten.

Gruß,
Bernhard
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Freitag 24. April 2009, 20:01

Ok, wenn Du die Frage in meinem letzten Post beantwortet hast, dann zeige ich Dir hier einen funktionierenden Code, der while-Schleifen in einer while-Schleife sinnvoll nutzt. Schau ihn Dir erst an, nachdem Du über Deinen eigenen Code nachgedacht hast.

Code: Alles auswählen

antworten = ("JA", "NEIN")
whd = ""
wetter=''
freundin=''
while whd != "NEIN":
    print ("---------------------------------------------------------------")
    print ("Abfrageprogramm zur Freizeitgestaltung von maennlichen Menschen")
    print ("---------------------------------------------------------------")
    print ("Bitte nur mit JA oder NEIN antworten.")
    print ("(Andere Eingaben werden NICHT akzeptiert!)")
    print ("")
    #jede einzelne Frage wird jetzt wiederholt, bis die Antwort passt.
   #dafuer lohnt sich dann auch eine Schachtelung von Schleifen. 
    while wetter not in antworten:
        wetter = raw_input ("Ist draussen denn gerade schoenes Wetter? ")
        if wetter not in antworten:
            print "Ich habe doch gesagt JA oder NEIN. Also nochmal:"
    #dasselbe noch mal mit der Freundin-Frage
    while freundin not in antworten:
        freundin = raw_input ("Und hat deine Freundin momentan Zeit fuer dich? ")
        if freundin not in antworten:
            print "Los Freundchen, jetzt mal mit JA oder NEIN:"
            
     # if wetter in antworten and freundin in antworten (dieses if braucht man jetzt nicht mehr)
    if wetter == "JA" and freundin == "NEIN":
        print "Dann geh jetzt zum Fussballspiel."

    if wetter == "JA" and freundin == "JA":
        print "Am Besten gehst du spazieren."

    if wetter == "NEIN" and freundin == "NEIN":
        print "Wenn du schon alleine bist, solltest du ein Buch lesen."

    if wetter == "NEIN" and freundin == "JA":
        print "Dann ab mit dir in das Kino!"
     #und nochmal eine Schleife um den User zu einer passenden Antwort zu nötigen:
    whd =""
    while whd not in antworten :
        whd = raw_input ("Wiederholen? (JA/NEIN): ")
        if whd not in antworten:
            print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
            print "(Nur in Grossbuchstaben JA oder NEIN eingeben!)"
    wetter = ''         #weil wir das in Zeile 14 und 19 wieder brauchen
    freundin = ''
Zuletzt geändert von Bernhard am Freitag 24. April 2009, 20:04, insgesamt 1-mal geändert.
zaine
User
Beiträge: 7
Registriert: Freitag 24. April 2009, 15:52

Freitag 24. April 2009, 20:04

Haha, sorry Bernhard, aber ich hab gerade selber mein Problem lösen können ohne deinen Code gesehen zu haben :) . Hab wie du es gesagt hast die Schleifen überdacht und kurzerhand einige Teile neu positioniert. Ergebnis: Alles läuft wie gewünscht. Hab jetzt noch diverse print Befehle hinzugefügt wegen ästhetischen Gründen, deshalb sieht der Script jetzt größer aus.

Hier der Code:

Code: Alles auswählen

whd = ""
antworten = ["JA", "NEIN"]
while whd != "ENDE":
    print ""
    print "---------------------------------------------------------------"
    print "Abfrageprogramm zur Freizeitgestaltung der männlichen Schöpfung"
    print "---------------------------------------------------------------"
    print "Bitte nur mit JA oder NEIN antworten."
    print "(Andere Eingaben werden NICHT akzeptiert!)"
    print ""

    wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ")
    freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
    while wetter not in antworten and freundin  not in antworten: 
            print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
            print "(Nur in Großbuchstaben JA oder NEIN eingeben!)"
            print ""
            print ""
            print ""
            wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
            freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
    else:
           if wetter == "JA" and freundin == "NEIN":
             print ""
             print "Dann solltest du zum heutigen Fußballspiel gehen."
             print ""
             print ""
             print ""
             whd = raw_input ("Wiederholen? Zum Schließen ENDE eingeben: ")
             
           if wetter == "JA" and freundin == "JA":
             print ""
             print "Wenn das so ist, geh am Besten im Park spazieren"
             print ""
             print ""
             print ""
             whd = raw_input ("Wiederholen? Zum Schließen ENDE eingeben:")
             
           if wetter == "NEIN" and freundin == "NEIN":
             print ""
             print "Wenn du schon alleine bist, solltest du ein Buch lesen."
             print ""
             print ""
             print ""
             whd = raw_input ("Wiederholen? Zum Schließen ENDE eingeben: ")
             
           if wetter == "NEIN" and freundin == "JA":
             print ""
             print "Na wie wäre es dann, wenn ihr beide jetzt ins Kino geht?"
             print ""
             print ""
             print ""
             whd = raw_input ("Wiederholen? Zum Schließen ENDE eingeben: ")
               

         

    



Zuletzt geändert von zaine am Freitag 24. April 2009, 20:06, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 24. April 2009, 20:05

Strings haben eine __mul__-Methode, d.h. du kannst

Code: Alles auswählen

print '-' * 30
schreiben.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Freitag 24. April 2009, 20:10

Hi,

das freut mich, wenn's gefruchtet hat. Dennoch zwei Fragen:

1) Was würde passieren, wenn Du dieses "else" einfach löschen und die darunter kommenden Zeilen weniger weit einrücken würdest?

2) Warum muss in Zeile 29, 37, 45 und 53 dasselbe stehen? Geht das auch eleganter? Kann man das so in die Schleife platzieren, dass man es nur einmal eintippen muss?

Gruß,
Bernhard
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 24. April 2009, 20:16

Die ganzen

Code: Alles auswählen

print ""
vermeide ich, indem ich z.B.

Code: Alles auswählen

print "\nDann solltest du zum heutigen Fußballspiel gehen.\n\n\n"
Zu 2.: Die Zeilen 29, 37 und 45 löschen und Zeile 53 um eine Ebene ausrücken. Achja, Zeile 54-62 kann man natürlich auch löschen :wink:

EDIT: Den while-else Konstrukt brauchst du hier nicht. Der else-Teil wird nur dann ausgeführt, wenn kein break in der while-Schleife ausgeführt wurde, was hier ja immer der Fall ist.
zaine
User
Beiträge: 7
Registriert: Freitag 24. April 2009, 15:52

Freitag 24. April 2009, 20:29

@derdon und bernhard: Danke^^

Hier die aktuelle Version (und vermutlich auch vorletzte):

Code: Alles auswählen

whd = ""
antworten = ["JA", "NEIN"]
while whd != "ENDE":
    print ""
    print "---------------------------------------------------------------"
    print "Abfrageprogramm zur Freizeitgestaltung der männlichen Schöpfung"
    print "---------------------------------------------------------------"
    print "Bitte nur mit JA oder NEIN antworten."
    print "(Andere Eingaben werden NICHT akzeptiert!)\n"
    
    wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ")
    freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
    while wetter not in antworten and freundin  not in antworten: 
            print "Bitte nur mit JA oder NEIN antworten, Abfrage wird wiederholt."
            print "(\nNur in Großbuchstaben JA oder NEIN eingeben!)\n\n\n"
            wetter = raw_input ("Ist draußen denn gerade schönes Wetter? ") 
            freundin = raw_input ("Und hat deine Freundin momentan Zeit für dich? ")
    
    if wetter == "JA" and freundin == "NEIN":
            print "\nDann solltest du zum heutigen Fußballspiel gehen.\n\n\n"
            whd = raw_input ("Wiederholen? Zum Beenden bitte ENDE eingeben: ")

    if wetter == "JA" and freundin == "JA":
            print "\nWenn das so ist, geh am Besten im Park spazieren\n\n\n"
            whd = raw_input ("Wiederholen? Zum Beenden bitte ENDE eingeben: ")

    if wetter == "NEIN" and freundin == "NEIN":
            print "\nWenn du schon alleine bist, solltest du ein Buch lesen.\n\n\n"
            whd = raw_input ("Wiederholen? Zum Beenden bitte ENDE eingeben: ")
             
    if wetter == "NEIN" and freundin == "JA":
            print "\nNa wie wäre es dann, wenn ihr beide jetzt ins Kino geht?\n\n\n"
            whd = raw_input ("Wiederholen? Zum Beenden bitte ENDE eingeben: ")

Wesentlich besser :)

Und wegen der "ENDE-Wiederholung": Ist sicher nicht sehr elegant, aber ich möchte versuchen, den Code so kurz wie möglich zu halten. Und eine Zeile pro Antwort bräuchte ich ja sowieso =).

Als nächstes änder ich die beiden Fragen um.^^
Antworten