problem mit mini-Python Programm

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.
PhiL18
User
Beiträge: 3
Registriert: Sonntag 17. September 2006, 13:38

problem mit mini-Python Programm

Beitragvon PhiL18 » Sonntag 17. September 2006, 13:55

Hi,
ich beschäftige mich erst seit kurzem mit Python. Vorkenntnisse habe ich letztes Jahr in der 11 in Informatik mit Java gesammelt. Jetzt bin grade dabei ein paar "mini-programme" in python zu schreiben also halt solche "spielereien" Jetzt wollte ich mal ansatzweis so eine Frage-Antwort Program schreiben (Wie z.b. zu finden in Monkey-Island). Jetzt haben sich aber folgende Probleme aufgetan. Am besten erstmal das "Prog":

Code: Alles auswählen

print "Hallo! Was kann ich für sie tun?"
print '''Antworten:
        a = Ich habe eine Frage
        b = Ich möchte etwas kaufen
        c = Nichts'''

x = raw_input(" ")
if x == "a":
    print "Was ist ihre Frage?"
    print '''Antworten:
            e = Wieviel Uhr ist es?
            d = Was ist der Sinn des Lebens?'''

y = raw_input (" ")
if y == "e":
    print "Keine Ahnung. Ich habe keine Uhr"
if y == "d":
    print "Die Antwort ist 42"
print "Program Ende"

if x == "b":
    print '''Ich habe folgendes im Angebot:
            x = Eis
            y = Kaffee
            z = Eiskaffe'''

y = raw_input (" ")
if y == "x":
    print "Da bitte. Iss!"
if y == "y":
    print "Da bitte. Trink!"
if y == "z":
    print "Alles klar, bitte!"
print "Program Ende"


if x == "c":
    print "Na gut, Auf wiedersehen!"
print "Program Ende"


(bei mir ist das natürlich alles richtig eingerückt, aber ich bekomm das hier irgendwie nicht hin)

Mein erstes Problem ist, wenn man am Afang "a" aufruft funktioniert es direkt. Will man aber Antwortmöglichkeit "b" aufrufen muss man "b"-enter und nochmal "b"-enter drücken. Bei "c" muss man erst dreimal "c"-enter drücken. Das zweite Problem ist, dass ich bei den jeweiligen Unterkategorien immer andere Buchstaben nehmen musste "d","e" etc. Aber es wäre natürlich schöner, wenn an in einer Kategorie wieder "a", "b"... hätte, nur wie? Und zu guter Letzt, wie kann ich einbauen, dass man das Program restarten kann während es läuft ohne aus zu machen und neu zu starten.
Das war dann erstmal alles. Ich in mir auch sicher, dass sich einige Leute an den Kopf fassen werden und denken "Oh man, wie kann man nur solche fragen stellen...?!??" Aber ich hoffe, dass ihr mir trotzdem helfen werdet ;)


mfg



PhiL

Edit (Leonidas): Code in Python-Tags gesetzt.
BlackJack

Re: problem mit mini-Python Programm

Beitragvon BlackJack » Sonntag 17. September 2006, 14:13

PhiL18 hat geschrieben:Mein erstes Problem ist, wenn man am Afang "a" aufruft funktioniert es direkt. Will man aber Antwortmöglichkeit "b" aufrufen muss man "b"-enter und nochmal "b"-enter drücken. Bei "c" muss man erst dreimal "c"-enter drücken.


Das Programm wird einfach linear abgearbeitet, Zeile für Zeile. Es sei denn Du schreibst bedingten Programmtext mit ``if`` der nur dann ausgeführt wird, wenn die Bedingung wahr ist.

Das zweite Problem ist, dass ich bei den jeweiligen Unterkategorien immer andere Buchstaben nehmen musste "d","e" etc. Aber es wäre natürlich schöner, wenn an in einer Kategorie wieder "a", "b"... hätte, nur wie?


Das hat auch wieder etwas damit zu tun das bei Dir der ganze Quelltext linear da steht, obwohl es eigentlich ein Entscheidungsbaum ist.

Und zu guter Letzt, wie kann ich einbauen, dass man das Program restarten kann während es läuft ohne aus zu machen und neu zu starten.


Quelltext der mehrfach ausgeführt werden soll, den schreibt man in eine Schleife.

Bei Spielen werden solche einfachen Dialoge aber in der Regel nicht als Programm kodiert, sondern als Datenstruktur über die ein kleines Stückchen Programm läuft und sie quasi interpretiert.
PhiL18
User
Beiträge: 3
Registriert: Sonntag 17. September 2006, 13:38

Beitragvon PhiL18 » Sonntag 17. September 2006, 14:35

"Das Programm wird einfach linear abgearbeitet, Zeile für Zeile. Es sei denn Du schreibst bedingten Programmtext mit ``if`` der nur dann ausgeführt wird, wenn die Bedingung wahr ist."



Ich weiss schon irgendwie was du meinst, aber komm nicht ganz drauf wie ich das jetzt umschreiben soll, ein Beispiel würde mir helfen :roll:


mfg


PhiL
BlackJack

Beitragvon BlackJack » Sonntag 17. September 2006, 15:10

Der "Block" ab Zeile 14 wird *immer* ausgeführt, Du möchtest den aber nur ausgeführt haben, wenn `x == "a"` ist, also muss der Quelltext mit in diesen ``if``-Zweig hinein. Das gilt für die anderen Abfragen analog.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Sonntag 17. September 2006, 15:11

Hi. Hier ein Beispiel

Code: Alles auswählen

print "Hallo! Was kann ich für sie tun?"
print '''Antworten:
        a = Ich habe eine Frage
        b = Ich möchte etwas kaufen
        c = Nichts'''

while True:
    x = raw_input(" ")
    if x == "a":
        print "Was ist ihre Frage?"
        print '''Antworten:
                e = Wieviel Uhr ist es?
                d = Was ist der Sinn des Lebens?'''

        y = raw_input (" ")
        if y == "e":
            print "Keine Ahnung. Ich habe keine Uhr"
        if y == "d":
            print "Die Antwort ist 42"
            print "Program Ende"
            break

   
    if x == "b":
       print '''Ich habe folgendes im Angebot:
              x = Eis
              y = Kaffee
              z = Eiskaffe'''

       y = raw_input (" ")
       if y == "x":
          print "Da bitte. Iss!"
       if y == "y":
          print "Da bitte. Trink!"
       if y == "z":
          print "Alles klar, bitte!"
          print "Program Ende"
          break


    if x == "c":
       print "Na gut, Auf wiedersehen!"
       print "Program Ende"
       break


lg

edit: Der break Aufruf beendet die while schleife
PhiL18
User
Beiträge: 3
Registriert: Sonntag 17. September 2006, 13:38

Beitragvon PhiL18 » Sonntag 17. September 2006, 17:28

Hi,
vielen dank ;)


mfg


PhiL
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 18. September 2006, 14:55

Freut mich wenn ich helfen konnte :)

lg

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder