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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 13. Dezember 2004, 15:08

jens hat geschrieben:Du hättest auch, damit man das Ergebniss noch sehen kann, ganz am Ende ein pause = raw_input("[ENTER drücken]") einfügen können Wink Muß man auch immer bei Batch-Progs machen, wenn man sie einfach nur per doppel-klick ausführt...
Clython hat geschrieben:Für faule und dumme bietet sich noch dieser kleine Kniff an: Rufe am Ende deines Codes nochmal ein raw_input() auf, dann musst du noch einmal auf Enter drücken bevor das Fenster zugeht.
Man könnte auch nur raw_input("[ENTER drücken]") nehmen, das geht auch, weil du die Eingabe ja nicht brauchst, aber Clython hat rech: das ist kein guter Stil.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 13. Dezember 2004, 15:09

Das wuste ich nicht... Auch nicht schlecht... Eine Eingabe die Sinnlos ist, so zu sagen... :lol:
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 13. Dezember 2004, 15:16

In Python muss du ja die Rückgabewerte von Funktionen nicht unbedingt nutzen. du kannst sie auch einfach ignorieren. Beispielsweise ist es in Basic so, dass es Subs und Functions gibt, die einen geben etwas zurück die anderen nicht - sonst sind sie gleich. Komisch nicht? ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
JOJO
User
Beiträge: 14
Registriert: Sonntag 12. Dezember 2004, 16:02
Kontaktdaten:

Dienstag 14. Dezember 2004, 19:18

So ich habe mein kleines Quiz-Programm ein bisschen erweitert es läuft auch bis auf eine kleining kleingkeit wo ich mir nich zu helfen weiss.
Hier der neue 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 "Richtig ist:", loesung
    print

punkte = 0

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"

# End
Ich habe ja gesagt wenn die antwort richtig ist soll er der variablen PUNKT
+1 dazu rechen aber das macht er irgenwie nicht.
Es steht immer am ande das ich nur 1 Punkt erreicht habe obwohl ich alle Fragen richtig beatwortet habe.
Sieht wer den fehler :/ ?

MFG JOJO
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 14. Dezember 2004, 19:20

es muß punkte += 1 heißen nicht punkte=+1 denn das ist das selbe wie punkte=1 ;)
JOJO
User
Beiträge: 14
Registriert: Sonntag 12. Dezember 2004, 16:02
Kontaktdaten:

Dienstag 14. Dezember 2004, 19:24

Super danke geht =)


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

Freitag 17. Dezember 2004, 17:15

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:

Freitag 17. Dezember 2004, 17:36

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:

Freitag 17. Dezember 2004, 17:54

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 17. Dezember 2004, 18:53

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 Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 17. Dezember 2004, 20:15

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:

Samstag 18. Dezember 2004, 18:05

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 20. Dezember 2004, 07:55

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:

Mittwoch 22. Dezember 2004, 15:08

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:

Mittwoch 22. Dezember 2004, 15:22

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]
Antworten