Gewinnspiel

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

@snafu:

Code: Alles auswählen

In [18]: string.uppercase[-2:-12:-2]
Out[18]: 'YWUSQ'
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
import easygui, random, sys

frage_antwort = [
	
	("Was ist Fifa13?", "Ein Computerspiel", ["Ein Computerspiel", "Ein Monster", "Eine Uhrzeit"]),
 	("Was ist eine Computermaus?", "Ein Steuerungsgeraet", ["Ein Steuerungsgeraet", "Eine Tastatur", "Ein Bildschirm"]), 
	("Test1", "Test2", ["Test2", "Test3", "Test4"])
]

	

punkte = 0
versuche = 2



for frage, loesung, antwort in frage_antwort:
	antworten = random.sample(antwort, len(antwort))
	frage_gui = easygui.buttonbox(frage, choices = antworten)
	if frage_gui == loesung:
		print "richtig"
@snafu) Danke Dir habe ich im Code viel dazugelernt. Die Aufteilung in mehreren Zeilen der Listen ist klug.
Und mal sehen, ob ich mal Zeit für Deine Aufgabe habe :P

Code basiert auf Strategie von Leonidas. Ist übersichtlicher und besser für mich.
Falls aber irgendwann mal mehrere Antwortmöglichkeiten korrekt sein können, muss man sich natürlich wieder etwas anderes ausdenken, um dies einigermaßen benutbar in Code zu bringen...
Seit wann gibt es im "Wer wird Millionär" mehr Antwortmöglichkeiten? :lol:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

snafu hat geschrieben:Falls aber irgendwann mal mehrere Antwortmöglichkeiten korrekt sein können, muss man sich natürlich wieder etwas anderes ausdenken, um dies einigermaßen benutbar in Code zu bringen...
Es kommt halt darauf an, was für Anwendungen erwartet werden. Der Vorschlag von Leonidas ist daher sicher der flexibelste, da eine Menge an richtigen und eine Menge an falschen Antworten übergeben werden kann.
Gary123456 hat geschrieben:@snafu) Danke Dir habe ich im Code viel dazugelernt. Die Aufteilung in mehreren Zeilen der Listen ist klug.
Und mal sehen, ob ich mal Zeit für Deine Aufgabe habe :P

Code basiert auf Strategie von Leonidas. Ist übersichtlicher und besser für mich.
Du hast es aber offensichtlich nicht verstanden. Du machst doch jetzt genau das, von dem dir weiter oben abgeraten wurde: du führst das richtige Element noch einmal extra auf. Das hat alle Nachteile des Indexansatzes und macht Fehler noch wahrscheinlicher, da sich ein kleiner Schreibfehler schneller einschleicht als ein Indexfehler. Schau dir den Ansatz von Leonidas noch einmal genau an.
Gary123456 hat geschrieben:Seit wann gibt es im "Wer wird Millionär" mehr Antwortmöglichkeiten? :lol:
Eine Änderung der Anforderung passiert häufiger als man denkt (also eigentlich fast immer). Daher muss immer ein Zwischenweg aus Allgemeinheit und Aufwand gefunden werden.
Das Leben ist wie ein Tennisball.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Letzter Versuch für heute bis ich durchdrehe :shock: :

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
import easygui, random, sys

frage_antwort = [
	
	("Was ist Fifa13?", ["Ein Computerspiel", "Ein Monster", "Eine Uhrzeit"]),
 	("Was ist eine Computermaus?", ["Ein Steuerungsgeraet", "Eine Tastatur", "Ein Bildschirm"]), 
	("Test1", ["Test2", "Test3", "Test4"])
]

	

punkte = 0
versuche = 2



for frage,  antwort in frage_antwort:
	antworten = random.sample(antwort, len(antwort))
	frage_gui = easygui.buttonbox(frage, choices = antworten)
	if frage_gui == antwort[0]:
		print "richtig"
Das müsste aber stimmen. Zwar "unübersichtlicher", basiert aber auf die Strategie, dass immer die Antwort mit dem Index0 die richtige Lösung ist.

Ich fang schon mal an zu beten.
BlackJack

@Gary123456: Das was Du `antwort` nennst müsste eigentlich `antworten` heissen, denn es ist ja nicht eine Antwort sondern eine Liste von Antworten. Das was Du `antworten` nennst würde ich gar nicht erst an einen Namen binden, denn der wird ja sowieso nur an einer Stelle verwendet.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Noch eine weitere Variante:

Code: Alles auswählen

import easygui, random, sys

frage_antwort = [
    ("Was ist Fifa13?", ["Ein Computerspiel"], ["Ein Monster", "Eine Uhrzeit"]),
    ("Was ist eine Computermaus?", ["Ein Steuerungsgeraet"], ["Eine Tastatur", "Ein Bildschirm"]), 
    ("Test1", ["Test2"], ["Test3", "Test4"])
]

for frage,  richtige_antworten, falsche_antworten in frage_antwort:
    antworten = random.sample(richtige_antworten+falsche_antworten,
        len(richtige_antworten)+len(falsche_antworten))
    antwort = easygui.buttonbox(frage, choices = antworten)
    if antwort in richtige_antworten:
        print "richtig"
Damit sind auch mehrere richtige Antworten möglich.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

OK, aber vom Prinzip und Code her besser? Habe den Code verbessert.

@Sirius) Das wäre eine Aufgabe für mich. Das aber evtl später, denn ich habe das Programm geplant. Vorerst will ich es mit einer Antwortmöglichkeit haben. Es werden auch Jokers eingeführt ;)
nezzcarth
User
Beiträge: 1753
Registriert: Samstag 16. April 2011, 12:47

Gary123456 hat geschrieben: [...] und in der Theorie ist mir eh alles klar! 8)
Erfahrungsgemäß macht man sich mit solchen Aussagen selbst was vor... ;) Das gehört halt beides zusammen. Ich treffe öfter mal Leute, die mir sagen "Englisch kann ich eigentlich ganz gut, so von der Grammatik her, aber mir fehlen halt die Vokabeln", das wird ihnen aber eben nichts bringen, wenn sie irgendwo mal nach dem Weg fragen wollen ;)

Meiner Meinung nach gehört zu jedem Lernvorgang auch eine realistische Einschätzung der eigenen Fähigkeiten. Selbstüberschätzung ist aus psychischer Sicht vielleicht recht angenehm, wird dich aber nicht weiterbringen.

Du bekommst hier viele nützliche Hinweise, bist aber immer nur am erklären, warum du deins trotzdem besser findest und dass du eh schon alles verstanden hast. Kannst du ja machen, aber so wird das mit Programmieren lernen viel länger dauern, als eigentlich nötig wäre :)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Meine Mäkelei war natürlich etwas sophistisch, für den "Wer wird Millionär"-Ansatz tuts die Annahme mit Index 0. Allerdings halte ich es da mit EyDu, die Anforderungen ändern sich meist öfter, als einem lieb ist. So kann Sirius' Datenstruktur mit getrennten Listen richtiger und falscher Antworten auch Deine derzeitigen Anforderung abbilden (genau eine richtige Antwort, alle anderen falsch), ist zudem aber auch imstande, z.B. multiple choice-Fragen abzubilden.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Hallo,

@jerch)
Es wäre interessant, wenn ich mal in der GUI choice Boxen proggen könnte ;) Da müsste ich mich noch umsehen. Aber vorerst sind mir Buttons lieber

@nezzcareth)
Um es korrekter auszudrücken: Theorie aus dem Buch habe ich verstanden.
Du bekommst hier viele nützliche Hinweise, bist aber immer nur am erklären, warum du deins trotzdem besser findest und dass du eh schon alles verstanden hast. Kannst du ja machen, aber so wird das mit Programmieren lernen viel länger dauern, als eigentlich nötig wäre :)
Wo denn bitteschön? Ich habe alles versucht, die Vorschläge anzunehmen? Und am aktuellen Code scheint auch alles super zu laufen. :shock:

Aber für heute ist vorerst Schluss, habe noch vieles zu tun ;)
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Hallo,

Code: Alles auswählen

liste = ["Test1, Test2, Test3"]
Kann man das irgendwie in 3 Elemente wie

Code: Alles auswählen

liste = ["Test1", "Test2", "Test3"]
zerlegen?

Bin da grad echt am zweifeln :)
BlackJack

@Gary123456: Grundlegende Zeichenkettenoperationen: `split()` und eine der `strip()`-Methode würde ich mal vorschlagen.

Edit: Wofür brauchst Du das denn?
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Vielen Dank. Diese Funktion kannte ich vorher noch nicht. Ich brauche das für mein Gewinnspiel, um der Liste was hinzuzufügen ;)
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Wenn Ihr den Code sehen wollt:

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
import easygui, random, sys


frage_antwort = [
	
	("Was ist Fifa13?", ["Ein Computerspiel", "Ein Monster", "Eine Uhrzeit"]),
 	("Was ist eine Computermaus?", ["Ein Steuerungsgeraet", "Eine Tastatur", "Ein Bildschirm"]), 
	("Test1", ["Test2", "Test3", "Test4"])
]

	

punkte = 0
versuche = 2

frage_an_user = raw_input("Moechten sie eine Frage hinzufuegen? 'ja' fuer Ja")

if frage_an_user == "ja":
    frage_liste = raw_input("Welche Frage wuenschen sie sich?")
    antwort_moeglichkeiten = raw_input("Welche Antworten wuenschen sie sich (per Leerzeichen getrennt!)") #immer index 0 richtige Antwort!
    frage_antwort.extend([(frage_liste, antwort_moeglichkeiten.split())])


for fragen,  antworten in frage_antwort:
    frage_gui = easygui.buttonbox(fragen, choices = random.sample(antworten, len(antworten)))

    if frage_gui == antworten[0]:
        print "richtig"
        punkte += 100
        versuche -= 1

Überlege mir gerade, was ich als nächstes einbauen werde. Habe jetzt auch das Kapitel 'Funktionen' durchgenommen. D.h. als nächstes kommt OOP dran und bevor dem würde ich noch was mit Funktionen zu tun. Jemand Vorschläge, was ich dem Programm hinzufügen könnte?
BlackJack

@Gary123456: Ich würde die möglichen Antworten einzeln eingeben lassen. Eine Antwort zerlegen ist nicht so einfach. Leerzeichen sind ungeeignet, weil man damit alle Antworten ausschliesst, die Leerzeichen enthalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gary123456 hat geschrieben:Vielen Dank. Diese Funktion kannte ich vorher noch nicht. Ich brauche das für mein Gewinnspiel, um der Liste was hinzuzufügen ;)
Öh... Listen fügt man Elemente mittels ``list.append`` hinzu! Wozu Du da string-Methoden brauchst, erschließt sich uns hier nicht...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Daran habe ich nicht gedacht, Recht hast Du aber :lol: Danke!

Hyperion)

Wenn Du Antworten mit Leerzeichen eingibst (also insgesamt sagen wir mal 3 Antworten) speichert es das in einem Element und nicht in 3. So: liste = ["Antwort 1 Antwort 2 Antwort 3"], verstanden was ich meine? Aber wenn ich jetzt, wie BlackJack sagte, einzeln diese Antworten abfrage, bräcuhte ich die Stringoperationen nicht.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

So was wie Wer wird Millionär hatten wir auch mal angefangen zu programmieren (ist schon ein älteres Projekt ... weiß nicht, wie gut das Programm ist). Wir haben auch recht viele Fragen zusammengestellt. ;) AFAIK (!) sind sie GNU GPL. :mrgreen:
Die Tabellen sind CSV-Tabellen. Mit den richtigen Einstellungen kannst du sie einfach aus der Wiki-Seite kopieren und mit dem csv-Modul auslesen.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

@nomnom) Vielen, vielen Dank!

@all) Code ausgebessert. Funktioniert ohne jegliche Probleme. :)
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

oO Jetzt merk ich erst, wie Klassen nützlich sein können. Mir geht da grad eine blendende Idee auf :)
Antworten