nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Soo, jetzt habe ich geändert: - die Struktur der Fragen(Ich hoffe so wie es jetzt ist, ist's "logisch" - alle, ausser ein paar Zeilen(dann 83 oder so) auf '⇐ 79' Zeichen beschränkt - die letzte funktion mit einer for - schleife versehen Danke für den Tipp, Lunar:
Noch als Tipp für die Zukunft: "Geht doch" ist kein Qualitätsmerkmal, sondern Vorraussetzung. Ein Programm muss immer "gehen", also seinen Aufgabenzweck erfüllen. Ein gutes >Programm ist darüber hinaus noch sauber entworfen, und elegant und logisch programmiert, so dass das Verständis des Codes vereinfacht wird, was wiederrum die Wartbarkeit >fördert und Fehler vermeidet.
Danke für die Anregung, snafu1!:
Danke für den Tipp mit for..in..range , DasIch Mr. Kanister hat geschrieben: http://docs.python.org/tut/node7.html#SECTION007500000000000000000
Also wenn ich das richtig lese, kann man mit liste.keys() nur alle keys auf einmal herauslesen 🙄. Wenn ich falsch liege, bitte sagen 😉 Script im Anhang. Gruss
- WWM-Neu.py (8.3 KiB)
- Download WWM-Neu.py
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
Mr. Kanister hat Folgendes geschrieben:
http://docs.python.org/tut/node7.html#SECTION007500000000000000000
Also wenn ich das richtig lese, kann man mit liste.keys() nur alle keys auf einmal herauslesen 🙄. Wenn ich falsch liege, bitte sagen 😉
Auf die Values(Werte) der dazugehörigen Keys kannst du folgendermaßen zugreifen:
for key in liste.keys():
print(liste[key]) Oder ich hab dich jetzt falsch verstanden und du möchtest doch was anderes 😉
Gruß Martin
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Ich möchte ja auf die einzelnen keys der liste zugreifen können. Also z.B. bei:
liste = { 2 : ['Hallo'], 3 : ['Ciao'] } möchte ich einzeln die keys 2 und 3 rausfischen ☺
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
N3X0NIC hat geschrieben: Ich möchte ja auf die einzelnen keys der liste zugreifen können. Also z.B. bei:
liste = { 2 : ['Hallo'], 3 : ['Ciao'] } möchte ich die einzeln die keys 2 und 3 rausfischen ☺
Wenn du doch weißt, wie die Keys heißen, die du abfragen willst, dann benutzt die eckigen Klammern:
>>> liste = { 2 : ["Hallo"], 3 : ["Ciao"] }
>>> print(liste[2])
['Hallo']
>>> print(liste[3])
['Ciao']
>>> print(liste[3][0])
Ciao 'liste[3][0]' deswegen, weil du als Value zu den Keys ja Arrays angibst. Wenn man nur 'liste[3]' angibt, dann erhält man das ganze Array.
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Oops, hab mich schon wieder missverständlich ausgedrückt: Also ich möchte, dass ich bei dem Beispiel die einzelnen keys, also 2 und 3, ausgeben kann. Also sowas in die Richtung:
>>> liste = { 2 : ['Hallo'], 3 : ['Ciao'] }
>>> liste.key[0]
2
>>> liste.key[1]
3 Nur dass es so nicht klappt
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
ROFL...du willst mehrfache Indirektion 😲 *SCNR* Ne...mal im Ernst. Wenn du mit 'liste.key[0]' auf einen Key zugreifen könntest, dann könntest du doch auch direkt auf einen Inhalt (Value) zugreifen. Das Problem ist auch - ok, genau genommen "it's not a bug it's a feature" - , dass die einzelnen Elemente eines dicts NICHT geordnet abgelegt werden, weshalb du mit 'liste.key[0]' theoretisch sowieso immer auf ein anderes Element zugreifen würdest. Gruß Martin
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Dann frag ich mich aber wie ich das machen soll: Marc 'BlackJack' Rintsch hat geschrieben: Auch hier sind wieder magische Konstanten, die man sich aus fragen holen kann. Dort stehen die Beträge schliesslich schon einmal.
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
Du willst folgendes, oder?
>>> liste
{100: [['frage1', ('a', 'b'), 'a'], ['frage2', ('a', 'b'), 'b']]}
>>> import random
>>> random.choice(liste[100])
['frage1', ('a', 'b'), 'a']
>>> random.choice(liste[100])
['frage2', ('a', 'b'), 'b'] Wenn du jetzt noch aus dem dict "stufe" eine Liste machst, kannst du zB. über
random.choice(liste[stufe[3]]) auf eine beliebige Frage der Stufe 3 zugreifen.
(ich hoffe ich hab jetzt verstanden was du willst/wolltest ☺ )
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Naja, zufällige Frage hab ich ja schon durch
def frage_stellen(wert,stop_wert):
frage, antworten, loesung = random.choice(fragen[wert]) aber die Frage ist glaub ich eher, ob ICH Marc 'BlackJack' Rintsch richtig verstanden habe. Das war ja der einzige Grund, warum ich das wissen wollte, obwohl ich, so, wie ich das von Marc 'BlackJack' Rintsch verstanden habe, für überflüssig halte. Aber wie gesagt als Anfänger kann ich das leider noch nicht beurteilen, wie man das an der Fragenstruktur gesehen hat 😬 Also frag ich einfach mal so, ist der code wie er jetzt ist, logisch, verständlich und übersichtlich...?
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
Also frag ich einfach mal so, ist der code wie er jetzt ist, logisch, verständlich und übersichtlich...?
Vielleicht ein paar einzelne Punkte, die auch schon genannt wurden: Du benutzt Tabs. Benutze zum Einrücken Leerzeichen. In den meisten Editoren kannst du einstellen, dass Tabs durch eine bestimmte Anzahl an Leerzeichen ersetzt werden sollen. Schau dir dazu unbedingt auch nochmal das Python Style Guide an. if eingabe == loesung:
return True Hier kannst du auch einfach schreiben:
return(eingabe == loesung) def entwerten(frage,antworten,loesung,eingabe,wert,stop_wert): Stehen "frage", "antworten" und "loesung" nicht immer alle zusammen in einer Liste? Was passiert mit "stop_wert" im Laufe des Skritps?
stufe = { 0 : [0],
1 : [50],
2 : [100],
3 : [200],
4 : [300],
5 : [500],
6 : [1000],
7 : [2000],
8 : [4000],
9 : [8000],
10 : [16000],
11 : [32000],
12 : [64000],
13 : [125000],
14 : [500000],
15 : [1000000]
} Wenn du dafür schon extra was eigenes anlegst, warum dann ein dict und keine Liste?
Gruß Martin
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Du benutzt Tabs. Benutze zum Einrücken Leerzeichen. In den meisten Editoren kannst du einstellen, dass Tabs durch eine bestimmte Anzahl an Leerzeichen ersetzt werden sollen. Schau dir dazu unbedingt auch nochmal das Python Style Guide an.
Achja, das hab ich ganz vergessen 😉
Hier kannst du auch einfach schreiben:
return(eingabe == loesung
Hab ich ebend ausprobiert, dann fragt er nicht nach, ob ich wirklich aufhören möchte, wenn ich 's' drücke 🙄
Stehen "frage", "antworten" und "loesung" nicht immer alle zusammen in einer Liste?
in einer Liste im dict, ja, aber die möglichen Antworten stehen in einem Tupel(?) innerhalb der Liste. Alles auf Hinweis von snafu1: http://forum.ubuntuusers.de/post/1431365/
Was passiert mit "stop_wert" im Laufe des Skritps?
"stop_wert" ist der Wert des Geldbetrags immer der letzten Frage. Der wird dann ausgegeben, wenn man bei einer Frage aufhört, siehe:
def auswerten(frage,antworten,loesung,eingabe,wert,stop_wert):
if entwerten(frage,antworten,loesung,eingabe,wert,stop_wert) == False:
print "$$$ Du gehst mit",stop_wert,"Euro nach Hause! $$$" Festgelegt wird er hier:
stufe = { 0 : [0],
1 : [50],
2 : [100],
3 : [200],
4 : [300],
5 : [500],
6 : [1000],
7 : [2000],
8 : [4000],
9 : [8000],
10 : [16000],
11 : [32000],
12 : [64000],
13 : [125000],
14 : [500000],
15 : [1000000]
}
...
def alle_fragen_stellen():
for i in range(15):
j = i+1
frage_stellen(stufe[j][0],stufe[i][0]) das zweite Argument in "def frage_stellen()" wird damit belegt.
Allerdings fällt mir auch gerade auf, dass "stop_wert" in "def entwerten()" nichts bewirkt, nur in "def auswerten()" und somit auch "def frage_stellen()"
Wenn du dafür schon extra was eigenes anlegst, warum dann ein dict und keine Liste?
Weil ich, wie gesagt noch ziemlich am "Anfang der Sprache" und somit noch nicht konfirm mit den verschiedenen Möglichkeiten bin- eine Liste hab ich z.B. noch nie benutzt. Warum ich dann ein dict, def, ... kenne? Nunja, weil mir Ein Stein diese erklärt hat, nachdem ich ihm meinen ersten Versuch mit WWM(siehe Anhang) zeigte. Was ich dann jetzt verbessern werde ist: - ändern der Tabs in Leerzeichen - ändern des "stufe"-dicts in eine liste - die in "def entwerten()" enthaltenen Argumente auf die nötigen beschränken Gruss
- WWM-ALT.py (121.9 KiB)
- Download WWM-ALT.py
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
N3X0NIC hat geschrieben: Hier kannst du auch einfach schreiben:
return(eingabe == loesung
Hab ich ebend ausprobiert, dann fragt er nicht nach, ob ich wirklich aufhören möchte, wenn ich 's' drücke 🙄
Tschuldige, mein Fehler. In der konstellation musst du es so machen, weil return eine Funktion immer sofort beendet . N3X0NIC hat geschrieben: Stehen "frage", "antworten" und "loesung" nicht immer alle zusammen in einer Liste?
in einer Liste im dict, ja, aber die möglichen Antworten stehen in einem Tupel(?) innerhalb der Liste.
Na und!? 😉
>>> fragen
{50: [['Wer ist Bundeskanzler?', ('a) Anneliese Ferkel', 'b) Angela Merkel', 'c) Agathe Gerkel', 'd) Alice Jerkel'), 'b'], ['Was hiervon kann man essen?', ('a) Orangenkoffer', 'b) Apfeltasche', 'c) Kirschsack', 'd) Erdbeerranzen'), 'b']]}
>>> fragen[50][1][1][2]
'c) Kirschsack' Anhand des Index-Wirrwarrs siehst du aber schon, dass es vielleicht sinnvoll wäre, über die Struktur und Speicherung der Fragen ein wenig nachzudenken. Ich hab zwar jetzt spontan keine Idee, aber ich bin sicher, dass man es eleganter lösen kann.😉
N3X0NIC hat geschrieben: Allerdings fällt mir auch gerade auf, dass "stop_wert" in "def entwerten()" nichts bewirkt, nur in "def auswerten()" und somit auch "def frage_stellen()"
Richtig ... du stiftest durch die ganzen Funktionparameter aber auch ordentlich Verwirrung 😀 N3X0NIC hat geschrieben: Weil ich, wie gesagt noch ziemlich am "Anfang der Sprache" und somit noch nicht konfirm mit den verschiedenen Möglichkeiten bin- eine Liste hab ich z.B. noch nie benutzt.
Hatte vermutet, dass du dir ein kurzes Tutorial angeguckt hast. Dort werden die Basisdatentypen nämlich in der Regel recht früh aufgegriffen. Gruß Martin
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Na und!? 😉
>> fragen
{50: [['Wer ist Bundeskanzler?', ('a) Anneliese Ferkel', 'b) Angela Merkel', 'c) Agathe Gerkel', 'd) Alice Jerkel'), 'b'], ['Was hiervon kann man essen?', ('a) Orangenkoffer', 'b) Apfeltasche', 'c) Kirschsack', 'd) Erdbeerranzen'), 'b']]}
>> fragen[50][1][1][2]
'c) Kirschsack' Anhand des Index-Wirrwarrs siehst du aber schon, dass es vielleicht sinnvoll wäre, über die Struktur und Speicherung der Fragen ein wenig nachzudenken. Ich hab zwar jetzt spontan keine Idee, aber ich bin sicher, dass man es eleganter lösen kann.😉
Index Wirrwarr? hab ich ja aufgrund der Anregung von snafu1 nicht mehr 😉 Speicherung der Fragen: Ich denke, wenn DIR schon spontan nichts einfällt, wie sollte es mir einfallen ❓ ▶ 😊 😀 😬
du stiftest durch die ganzen Funktionparameter aber auch ordentlich Verwirrung
Also ich steig durch 😈 😈
Hatte vermutet, dass du dir ein kurzes Tutorial angeguckt hast. Dort werden die Basisdatentypen nämlich in der Regel recht früh aufgegriffen.
Tutorial Jein, habe ein Buch angefangen zu lesen. Da ich aber vorerst keine Lust hatte zu lesen, hab ich einfach etwas praktisches angefangen, WWM 😀! Was daraus zuerst geworden ist, sieht man in meinem letzten anhang 😬
|
nexonic
(Themenstarter)
Anmeldungsdatum: 23. Januar 2008
Beiträge: 952
|
Soo, jetzt keine tabs mehr 😀 "stufe" nicht mehr als dict sondern als liste die in "def entwerten()" enthaltenen Argumente auf die nötigen beschränkt
- WWM-0.2.1.py (10.6 KiB)
- Download WWM-0.2.1.py
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
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 😀 )
|