Seite 6 von 9

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:04
von BlackJack
@snafu:

Code: Alles auswählen

In [18]: string.uppercase[-2:-12:-2]
Out[18]: 'YWUSQ'

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:08
von Gary123456

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:

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:17
von EyDu
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.

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:26
von Gary123456
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.

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:30
von 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.

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:35
von Sirius3
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.

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 16:37
von Gary123456
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 ;)

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 17:02
von nezzcarth
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 :)

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 17:41
von jerch
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.

Re: Gewinnspiel

Verfasst: Dienstag 9. April 2013, 17:48
von Gary123456
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 ;)

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 14:26
von Gary123456
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 :)

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 14:34
von BlackJack
@Gary123456: Grundlegende Zeichenkettenoperationen: `split()` und eine der `strip()`-Methode würde ich mal vorschlagen.

Edit: Wofür brauchst Du das denn?

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 14:48
von Gary123456
Vielen Dank. Diese Funktion kannte ich vorher noch nicht. Ich brauche das für mein Gewinnspiel, um der Liste was hinzuzufügen ;)

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:00
von Gary123456
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?

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:09
von 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.

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:11
von Hyperion
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...

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:14
von Gary123456
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.

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:15
von nomnom
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.

Re: Gewinnspiel

Verfasst: Mittwoch 10. April 2013, 15:19
von Gary123456
@nomnom) Vielen, vielen Dank!

@all) Code ausgebessert. Funktioniert ohne jegliche Probleme. :)

Re: Gewinnspiel

Verfasst: Donnerstag 11. April 2013, 18:42
von Gary123456
oO Jetzt merk ich erst, wie Klassen nützlich sein können. Mir geht da grad eine blendende Idee auf :)