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

Beitragvon Leonidas » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 13. Dezember 2004, 15:09

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

Beitragvon Leonidas » 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:

Beitragvon JOJO » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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:

Beitragvon JOJO » Dienstag 14. Dezember 2004, 19:24

Super danke geht =)


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

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

Beitragvon Dookie » 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: Alles auswählen

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

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

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

Beitragvon Dookie » 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: Alles auswählen

#!/usr/bin/env python
import this
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Beitragvon raist1314 » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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:

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

Beitragvon Dookie » 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: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder