Senex
Anmeldungsdatum: 17. September 2007
Beiträge: 88
|
*mischt sich einfach mal ohne jegliche Kompetenz ein* Nicht, dass es jetzt bei dem konkreten Problem riesig was bringen würde, aber du könntest beispielsweise die Fragen als Klasse implementieren. Früher oder später wirst du vielleicht mal objektorientiert programmieren wollen, und da ist es dann nicht schlecht, wenn du es schon mal an einem einfachen Beispiel geübt hast.
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
*mischt sich einfach mal ohne jegliche Kompetenz ein*
Das würde ich nicht behaupten....Die Idee ist einfach Klasse (Haha...Wortspie 😀 l) Fühl dich von nun an zu den kompetenten gehörend ☺
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Mr. Kanister hat geschrieben: N3X0NIC hat geschrieben: die in "def entwerten()" enthaltenen Argumente auf die nötigen beschränkt
Ich bin zu dem Ergebnis gekommen, dass es doch recht sinnvoll ist, die Liste so auf zu splitten, wie snafu1 beschrieben hat; allerdings erst innerhalb der Funktion. Dann hast du kein Parameter-Wirrwarr und keinen Index-Wahn (Der Nachfolger von Rinder-Wahn 😀 )
wird doch innerhalb der funktion aufgesplittet:
def frage_stellen(wert,stop_wert):
frage, antworten, loesung = random.choice(fragen[wert]) ...die Fragen als Klasse implementieren...
Klasse? Wie? Wo? Was?
|
Senex
Anmeldungsdatum: 17. September 2007
Beiträge: 88
|
Klasse_(objektorientierte_Programmierung) Für eine Frage könnte das uuuungefähr so aussehen: (Man verzeihe mir das Nicht-Nutzen der Python-Syntax, kann kein Python [darauf bezog sich auch meine Inkompetenz 😉], auch wenn es ganz oben auf meiner Liste der noch zu lernenden Sprachen steht. [da stehen gar nicht mehr soo viele … 😉]) Klasse Frage Feld Frage #Ein String mit der Frage Feld Antwortmöglichkeiten #Ein Array mit den Antwortmöglichkeiten Feld Richtige Antwort #Der Index der richtigen Antwort Methode Antwort richtig? #Eine Funktion, die eine Zahl annimmt, mit dem Index der richtigen Antwort vergleicht und je nachdem True oder False zurückschmeißt # Vielleicht auch noch, je nach geplanter Struktur Feld Wert #Wie viel Euro man für die Frage kriegt Drum rum könnte man noch eine Klasse für das Spiel selbst bauen. Falls du Klassen noch nicht kennst, überleg dir, ob du sie kennenlernen willst (Ja! Du willst!), wenn ja ist das Programm vielleicht gar nicht soo schlecht, weil du ja den Code an sich schon hast und das ganze nur noch in Klassen verpacken musst.
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Eigentlich habe ich nicht vor mich gleich zu überstürzen 😲 😬 Ich denke Klassen sind noch ETWAS zu früh... 🙄 Vor allem weil ich in meinem 600 Seiten Buch erst auf S 88 bin und Klassen auf 280 vorkommen. Praktisch sollte ich eigentlich noch nicht einmal den if-befehl können. Ausserdem ist das Programm von Inhaltlichen Funktionen noch nichtmal fertig. So war mein Verlauf geplant:
|>>> 0.3 <<< |\––\––\––\––\––– |# Frage, ob nochmal spielen |# insgesamt eine bessere Übersicht und strukturierterer Aufbau der Fragen und der Eingabezeilen(während des Spielens) (→ strukturierterer Aufbau der Antwortmöglichkeiten ________________________________________________________________________________ |>>> 0.4 <<< |\––\––\––\––\––– |# pro Stufe 8 Fragen mehr ________________________________________________________________________________ |>>> 0.8 <<< |\––\––\––\––\––– |# Auswahlrunde mit 2 Auswahlfragen ________________________________________________________________________________ |>>> 0.9 <<< |\––\––\––\––\––– |# 3 Auswahlfragen mehr ________________________________________________________________________________ |>>> 1.0 <<< |\––\––\––\––\––– |# Alle Joker ________________________________________________________________________________ |>>> 1.1 <<< |\––\––\––\––\––– |# pro Stufe 5 Fragen mehr
Sprich: Es kommen noch ganz andere Probleme auf mich zu 😉 Aber trotzdem Danke für den Tipp 😉 Vielleicht werde ich, wenn ich in ein paar Monaten weiter mit Python bin, das Programm "umbauen" Vorerst kümmer ich mich aber darum, dass das Programm alle WWM-Artigen Funktionen besitzt, ausser diesem neuen "Risiko Joker", weil ich den doof finde 😛 😀 Gruss
|
Senex
Anmeldungsdatum: 17. September 2007
Beiträge: 88
|
Klingt vernüftig. Sehr vernünftig. Schön, dass es vernünftige Leute gibt, die sich nicht immer gleich übernehmen. (Ich will ein Betriebssystem schreiben! Mit Python! – Ja klaaar …)
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Pass auf ❗ Sonst tippe ich gleich ein Betribssystem mit meinem CASIO fx-9750G Plus Taschenrechner 😬 😀
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
Dein Code wäre leichter zu lesen wenn du die Reihenfolge der Funktionen gemäß dem Ablauf im Spiel einhalten würdest. Aber bei dir kommt erst das Logo, dann die Entwertung und sehr viel später erst das Fragestellen. Hat es einen Grund warum du das so machst? Außerdem ist besonders das Auswerten eine ziemlich große Funktion geworden. Das könnte man ja auch nochmal aufteilen. 😉 Du musst übrigens auch nicht soviele prints machen. Probier mal das aus: betrag = '100'
print '''Herzlichen Glückwunsch!
Du gehst mit %s Euro nach Hause :-)''' % betrag Dabei sagt %s, dass an dieser Stelle ein String eingesetzt werden soll, welcher am Ende durch % stringname benannt wird. Und wenn alle Elemente deines Antworten-Tupels (übrigens würde an der Stelle auch ne Liste gehen) untereinander angezeigt werden sollen, kannst du das auch so lösen: for antwort in antworten:
print antwort Sollten jetzt nur ein paar Hinweise sein, die einfach helfen, dass auch jemand anders oder du selber in 3 Monaten immer noch weißt was da überhaupt passiert ohne dich großartig durch den Code hin- und herwühlen zu müssen. Ändert nichts am Programmablauf, aber erleichtert das Lesen und Verstehen ungemein. 😉
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Dein Code wäre leichter zu lesen wenn du die Reihenfolge der Funktionen gemäß dem Ablauf im Spiel einhalten würdest. Aber bei dir kommt erst das Logo, dann die Entwertung und sehr viel später erst das Fragestellen. Hat es einen Grund warum du das so machst?
Ich weis gar nicht mehr genau, warum ich es gemacht hatte, aber ich glaube, ich dachte, dass erst die funktion definiert werden muss bevor man sie startet, aber er läuft sie ja am anfang eeh alle einmal durch, sodass ich sie jetzt in die richtige Reihenfolge gebracht habe.
Außerdem ist besonders das Auswerten eine ziemlich große Funktion geworden. Das könnte man ja auch nochmal aufteilen.
Das stimmt! Done!
Du musst übrigens auch nicht soviele prints machen. Probier mal das aus:
betrag = '100'
print '''Herzlichen Glückwunsch!
Du gehst mit %s Euro nach Hause :-)''' % betrag
find ich persönlich unpraktisch, weil, wenn der text z.b. eingerückt ist, also so:
def blabla():
if foo == bar:
if bar == foo:
print '''Irgendwas
anderes
nochwas''' dann wird er auch bei der ausgabe eingerückt angezeigt. Ich könnte natürlich die 2. und 3. zeile ganz an den rand machen, aber das ist dann auch schon wieder unübersichtlich.
for antwort in antworten:
print antwort geht auch, aber dann hat es nicht mehr "den bezug zur ausgabe" wie wenn ich es so mache wie ich es mache.
Denn so wie ich es habe, kann man sofort erkennen, dass so die antworten angezeigt werden. So hier der neue Code:
- WWM-0.3.py (13.0 KiB)
- Download WWM-0.3.py
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
N3X0NIC hat geschrieben: find ich persönlich unpraktisch, weil, wenn der text z.b. eingerückt ist, also so:
def blabla():
if foo == bar:
if bar == foo:
print '''Irgendwas
anderes
nochwas''' dann wird er auch bei der ausgabe eingerückt angezeigt. Ich könnte natürlich die 2. und 3. zeile ganz an den rand machen, aber das ist dann auch schon wieder unübersichtlich.
Soweit ich weiß erlaubt Python das auch gar nicht. Du bist eigentlich zu diesen Einrückungen gezwungen. N3X0NIC hat geschrieben: for antwort in antworten:
print antwort geht auch, aber dann hat es nicht mehr "den bezug zur ausgabe" wie wenn ich es so mache wie ich es mache. Denn so wie ich es habe, kann man sofort erkennen, dass so die antworten angezeigt werden.
Sorry, aber was soll for antwort in antworten denn wohl sonst implizieren? Okay, vielleicht sind die for-Schleifen ja noch nicht so vertraut...
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Sorry, aber was soll for antwort in antworten denn wohl sonst implizieren?
Da hast du schon Recht aber wenn ich es so mache, wie ich es habe, dann ist, so wie der Code in dem Teil aussieht, auch gleichzeitig schon die Struktur, wie es in der Ausgabe aussehen wird. Das meine ich damit 😉
Okay, vielleicht sind die for-Schleifen ja noch nicht so vertraut...
Jein, weis schon wie sie arbeiten und wozu sie gut sind, aber wenn ich z.B. nach einer Lösung für etwas suche, dann würde mir, falls die for-schleife eine Lösung eines Problems wäre, bestimmt nicht sofort soetwas einfallen.
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
Naja, vielleicht änderst du ja deine Meinung wenn du irgendwann mal 25 Elemente wiedergeben musst oder wenn gar nicht bekannt ist wieviele Elemente deine Liste zur Laufzeit haben wird. Übrigens lässt sich das Spiel auch beenden wenn man bei der Frage "wirklich aufhören" irgendwas außer n eingibt (also auch andere Sachen als j). Ich weiß ja nicht ob das so von dir gewollt ist.
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Naja, vielleicht änderst du ja deine Meinung wenn du irgendwann mal 25 Elemente wiedergeben musst oder wenn gar nicht bekannt ist wieviele Elemente deine Liste zur Laufzeit haben wird.
Meine Meinung bezieht sich gerade ausschließlich auf WWM. 4 != 25
Übrigens lässt sich das Spiel auch beenden wenn man bei der Frage "wirklich aufhören" irgendwas außer n eingibt (also auch andere Sachen als j). Ich weiß ja nicht ob das so von dir gewollt ist.
Ist leider nicht gewollt, hab ebend "def entwerten" so umgeschrieben:
def entwerten(loesung,eingabe):
# Frage Richtig -> Weiter
if eingabe == loesung:
return True
# Aufhoeren ?
if eingabe == 's':
stop = raw_input("Wirklich aufhoeren? [j/n] ")
print 55*'-'
if stop != 'j' and stop !='n':
raw_input("))) Falsche Eingabe (((")
entwerten(loesung,eingabe)
else:
return stop == 'n' Aber wenn ich jetzt erst ein 's', dann etwas falsches und dann ein 'j' eingebe, wiederholt er die Frage Trotzdem 🙄 ☹ Keine Ahnung warum
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
N3X0NIC hat geschrieben: Ist leider nicht gewollt, hab ebend "def entwerten" so umgeschrieben:
def entwerten(loesung,eingabe):
# Frage Richtig -> Weiter
if eingabe == loesung:
return True
# Aufhoeren ?
if eingabe == 's':
stop = raw_input("Wirklich aufhoeren? [j/n] ")
print 55*'-'
if stop != 'j' and stop !='n':
raw_input("))) Falsche Eingabe (((")
entwerten(loesung,eingabe)
else:
return stop == 'n' Aber wenn ich jetzt erst ein 's', dann etwas falsches und dann ein 'j' eingebe, wiederholt er die Frage Trotzdem 🙄 ☹ Keine Ahnung warum
Du sollst doch keine Rekursion einbauen 😀 Mach einfach innerhalb der Funktion eine while Schleife auf:
while (eingabe != "j" or eingabe != "n"):
... Gruß Martin
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
while (stop != "j" and eingabe != "n"):
raw_input ("))) Falsche Eingabe (((") Und danach 🙄 ❓
|