Problem bei dem starten eines Programmes.

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.
JOJO
User
Beiträge: 14
Registriert: Sonntag 12. Dezember 2004, 16:02
Kontaktdaten:

Super danke geht =)


MFG JOJO
JOJO
User
Beiträge: 14
Registriert: Sonntag 12. Dezember 2004, 16:02
Kontaktdaten:

Hi leute
ich wollte mein Quiz nen bissel modifizieren aber das klappt net so ganz
ich möchte wenn jemand die frage falsch beantwortet er die möglichkeit kriegt die frage zu wiederholen dies aber nur einmal machen kann.
Ich hatte ne Idee wie ich das mit dem frage wieder aufrufen aber das klappt nicht aber mit dem das er es nur 1 mal machen darf weiss ich nicht wie ich es machen soll könnt ihr mir da helfen ?
Hier is der momentahne Code:

Code: Alles auswählen

# Autor: Timo Eichsädt
# Datum: 12.12.2004
# quiz.py: Das erste Quiz

def quizfrage():
    global punkte
    antwort = raw_input(frage)
    if antwort == loesung:
        print "Richtig."
        punkte += 1
    else:
        print "Leider falsch."
        print "Noch ein versuch? "
        print "j oder n"
        
    print

punkte = 0

def frage1():
frage = "Mit welcher Sprache wurde dieses Programm geschrieben? "
loesung = "Python"
quizfrage()

frage = "Mit welchen reservierten Wort beginnt eine Funktionsdefinition? "
loesung = "def"
quizfrage()

frage = "Wie viel reservierte woerter hat Python? "
loesung = "29"
quizfrage()

print "Du hast", punkte
print "von 3 moeglichen Punkten erreicht."

if punkte == 3:
    print "Sehr gut Note 1"
else:
    print "Nicht schlecht aber du musst mehr ueben"
    
    print

raw_input("um das Programm zu beenden [ENTER] druecken")

# End

MFG JOJO
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi JOJO,

Für die Wiederholung könntest Du eine Schleife verwenden.

Code: Alles auswählen

def quizfrage():
    global punkte
    for i in xrange(2):# Schleife
        antwort = raw_input(frage)
        if antwort == loesung:
            print "Richtig."
            punkte += 1
            break # Schleife verlassen
        else:
            print "Leider falsch."
            print "Noch ein versuch? "
            nochmal = raw_input("j oder n ")
            if nochmal == "n":
                break # Schleife verlassen
            # Schleife nochmal versuchen
    print
als zweites würde ich an Quizfrage die "frage" und die "loesung" als Argumente übergeben, dann sind diese nicht mehr global definiert.

Code: Alles auswählen

def quizfrage(frage, loesung):
    global punkte
    for i in xrange(2):# Schleife
        antwort = raw_input(frage)
        if antwort == loesung:
            print "Richtig."
            punkte += 1
            break # Schleife verlassen
        else:
            print "Leider falsch."
            print "Noch ein versuch? "
            nochmal = raw_input("j oder n ")
            if nochmal == "n":
                break # Schleife verlassen
            # Schleife nochmal versuchen
    print
der Aufruf würde dann so aussehen:

Code: Alles auswählen

frage = "Mit welcher Sprache wurde dieses Programm geschrieben? "
loesung = "Python"
quizfrage(frage, loesung)
Du könntest dann auch die Fragen und Lösungen in eine Liste schreiben und dann die Liste in einer Schleife durchlaufen:

Code: Alles auswählen

...
daten = [("Frage 1", "Anwort 1"),
         ("Frage 2", "Antwort 2"),
         ("Frage 3", "Antwort 3")]

for frage, loesung in daten:
    quitzfrage(frage, loesung)

print "Du hast", punkte
print "von %d moeglichen Punkten erreicht." % len(daten)
...
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
JOJO
User
Beiträge: 14
Registriert: Sonntag 12. Dezember 2004, 16:02
Kontaktdaten:

Super Danke geht auch alles wie gewollt auser 1 kleine sache.
nachdem mann die Frage ein 2 mal beantwortet hat fragt er nochmal ob ich die frage ernuet beantworten will.
Das soll er aber net
wenn die antwort beim 2 mal falsch ist soll er einfach Falsch sagen und zu nächsten frage springen (also nicht nochmal fragen)
der aktuelle Code:

Code: Alles auswählen

# Autor: Timo Eichsädt
# Datum: 12.12.2004
# quiz.py: Das erste Quiz

def quizfrage(frage, loesung):
    global punkte
    for i in xrange(2):# Schleife
        antwort = raw_input(frage)
        if antwort == loesung:
            print "Richtig."
            punkte += 1
            break # Schleife verlassen
        else:
            print "Leider falsch."
            print "Noch ein versuch? "
            nochmal = raw_input("j oder n ")
            if nochmal == "n":
                break # Schleife verlassen
            # Schleife nochmal versuchen
    print

punkte = 0

frage = "Mit welcher Sprache wurde dieses Programm geschrieben? "
loesung = "Python"
quizfrage(frage, loesung)

frage = "Mit welchen reservierten Wort beginnt eine Funktionsdefinition? "
loesung = "def"
quizfrage(frage, loesung)

frage = "Wie viel reservierte woerter hat Python? "
loesung = "29"
quizfrage(frage, loesung)

print "Du hast", punkte
print "von 3 moeglichen Punkten erreicht."

if punkte == 3:
    print "Sehr gut Note 1"
else:
    print "Nicht schlecht aber du musst mehr ueben"
    
    print

raw_input("um das Programm zu beenden [ENTER] druecken")

# End
MFG JOJO
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

JOJO, learning by letting do?

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

# Autor: Timo Eichsädt
# Datum: 12.12.2004
# quiz.py: Das erste Quiz

def quizfrage(frage, loesung):
    global punkte
    global fehlversuche
    for i in xrange(2):# Schleife
        antwort = raw_input(frage)
        if antwort == loesung:
            print "Richtig."
            punkte += 1
            fehlversuche = 0
            break # Schleife verlassen
        else:
            print "Leider falsch."
            fehlversuche += 1
            if fehlversuche <= 1:
                print "Noch ein versuch? "
                nochmal = raw_input("j oder n ")
                if nochmal == "n":
                    break # Schleife verlassen
            else:
                break
            # Schleife nochmal versuchen
    print

punkte = 0
fehlversuche = 0

frage = "Mit welcher Sprache wurde dieses Programm geschrieben? "
loesung = "Python"
quizfrage(frage, loesung)

frage = "Mit welchen reservierten Wort beginnt eine Funktionsdefinition? "
loesung = "def"
quizfrage(frage, loesung)

frage = 'Wie viel reservierte Woerter hat Python? '
loesung = "29"
quizfrage(frage, loesung)

print u"Du hast %s von 3 möglichen Punkten erreicht." % str(punkte)

if punkte == 3:
    print "Sehr gut Note 1"
else:
    print u"Nicht schlecht, aber du musst mehr üben"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

oder einfach, da wir ja schon einen Zähler haben:

Code: Alles auswählen

def quizfrage(frage, loesung):
    global punkte
    for i in xrange(2):# Schleife
        antwort = raw_input(frage)
        if antwort == loesung:
            print "Richtig."
            punkte += 1
            break # Schleife verlassen
        else:
            print "Leider falsch."
            if i < 1:
                print "Noch ein versuch? "
                nochmal = raw_input("j oder n ")
                if nochmal == "n":
                    break # Schleife verlassen
                # Schleife nochmal versuchen
    print
Dookie
[code]#!/usr/bin/env python
import this[/code]
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Hab das ganze mal objektorientiert gebaut so spasseshalber, weiss nicht, obs gut geworden ist, guckts euch einfach mal an...

Code: Alles auswählen

#!/usr/bin/env python
#
# kleines quiz

class Question:
	def __init__(self, text, answer):
		self._text = text
		self._answers = []
		self._correctAnswer = answer

	def addAnswer(self, text):
		self._answers.append(text)
		
	def ask(self, num):
		points = 0
		while(1):
			print "Frage %d : %s" % (num ,self._text)
			for i in range(0, len(self._answers)):
				print "Antwort : %d : %s" % (i, self._answers[i])

			userinput = raw_input("???: ")
			if int(userinput) == self._correctAnswer:
				print "Richtig... ;-)"
				points = 1
				break
			else:
				if not raw_input("Leider falsch... nochmal[j/n]??") == 'j':
					break

		return(points)

class Quiz:
	def __init__(self):
		self._questions = []
		self._points = 0

	def addQuestion(self, text, answers, correct):
		q = Question(text, correct)
		for answer in answers:
			q.addAnswer(answer)
		self._questions.append(q)

	def run(self):
		for i in range(0, len(self._questions)):
			self._points += self._questions[i].ask(i)

		print "you reached %d points..." % self._points

# *** MAIN ***
quiz = Quiz()
quiz.addQuestion(
	"Was ist 10 hoch 0",["0", "1", "10", "1000"], 1
)
quiz.addQuestion(
	"Wann entdeckte Columbus Amerika", ["1939", "1789", "1492", "1117"], 2
)
quiz.addQuestion(
	"Wie lautet Fermats letzter Satz?", 
	["a^2 + b^2 = c^2", "a^2 / b^2 = c^2", "a^3 + b^3 = c^3", "b^2 / (a^2 / 2) = c^2 / 3"],
	2
)
quiz.run()
Fuer Anregungen immer dankbar...

Sebastian
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das ist ja super Interressant! Gerade das "def addQuestion()"... Denn da währe ich nie drauf gekommen, eine Klasse mit Daten zu stopfen und diese dann einfach in eine Liste zu "speichern"...
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Wie gesagt, ich weiss nicht, ob meine Lösung ein gutes Beispiel ist, sprich ob ich das ganze gut umgesetzt hab, kann ja auch sein, dass irgend nen Python Guru jetzt die Hände überm Kopf zusammenschlägt und denkt "O Gott... Wer hat das denn verbrochen..."

Denke aber, dass ichs ganz gut gelöst habe... *Hüstel*... :lol:

Bis dahin

Sebastian
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi raitst1314,

na die Hände über dem Kopf schlägt keiner zusammen, allerdings merkt ein erfahrener Pythonguru auf den ersten Blick, daß Du aus der C++/Java-Fraktion entlaufen bist ;)
Kleiner Tipp, immer in einer Forschleife mit einem Zähler xrange statt range verwenden. Noch besser in dem Fall bei deinem Script enumerate(). Und einige Klammern sind auch überflüssig.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie sähe deine OO-Lösung aus???
Antworten