Seite 1 von 1

Zahlenraten mit Pyhon

Verfasst: Dienstag 10. Januar 2006, 22:51
von Thyestes
Hy,

ich brauche dringend ein Python Prog, wo man "Zahlenraten" "spielen" kann. Hat einer von euch soetwas. Vielen Dank im Voraus.

Spielschritt 1: Mit dem Zufallszahlengenerator ist zunächst eine zu erratende ganze Zahl a aus
dem Bereich 1<=a<=100 zu bestimmen, die der Spieler natürlich nicht kennen darf.
Spielschritt 2: - Der Spieler muss a nun durch Eingabe einer ganzen Zahl b zu erraten versuchen.
- Solange er falsch rät: - Hinweis durch Ausgabe, ob b zu groß oder zu klein ist.
- Danach muss der Spieler erneut raten.
- Wenn richtig geraten:
-- Dann ist auf den Bildschirm und außerdem in ein Festplattenfile auszugeben:
--- Anzahl n der benötigten Rateversuche
-- Außerdem eine verbale Leistungseinschätzung in Abhängigkeit von n und zwar:
--- n= 1 oder 2: Super
--- n = 3 oder 4: Sehr gut
--- n = 5: Gute Leistung
--- n = 6, 7 oder 8 Mittelmäßige Leistung
--- n > 8 Schwache Leistung
- Nach Ende einer Spielrunde: Fragen, ob Spieler noch einmal spielen will.
Wenn ja, dann Fortsetzung bei Spielschritt 1, sonst Spielende.
(Die Ausgaben nach jeder Raterunde sind in das gleiche Festplattenfile zu schreiben.)
Der Spieler ist durch aussagekräftige Ausgaben auf dem Bildschirm durch das Spiel zu führen.
Es ist nicht mit globalen, sondern nur mit lokalen Variablen zu arbeiten.

ich sitze jetzt seit 2 Nächten und Tagen an diesem Problem. Wir haben Python an der Uni. hier mein Prog dazu:

Code: Alles auswählen

def cspiel():
intro()
unten, oben = 1, 100
erraten = 0
versuche = 0
while not erraten:
versuche = versuche + 1
tipp = (unten + oben) // 2
frage = "Ist deine Zahl %d? " % tipp
antwort = raw_input(frage)
if antwort == "+":
unten = tipp+1
elif antwort == "-":
oben = tipp-1
elif antwort == "=":
erraten = 1
else:
print "Das ist eine ungültige Antwort!"
print "Antworte mit +/=/-"
versuche = versuche - 1
if unten == oben:
tipp = unten
erraten = 1
print ("Ich habe mit %d Fragen herausgefunden:"
% versuche)
print "Deine Zahl ist %d!" % tipp
def zahlenraten():
print " Z A H L E N R A T E N"
print " ====================="
print
weiterspielen = 1
while weiterspielen:
cspiel()
weiterspielen = yesno("Noch ein Spiel?")
print
print "Ich hoffe, du hattest Spaß mit mir!"

Verfasst: Mittwoch 11. Januar 2006, 02:02
von BlackJack
Eigentlich wollte ich Deinen Quelltext in Code-Tags setzen, aber leider ist er überhaupt nicht eingerückt. Das solltest Du mal "reparieren".

Verfasst: Mittwoch 11. Januar 2006, 09:51
von querdenker
Meine Glaskugel sagt mir folgendes:
Das sind Hausaufgaben, mit anderen Worten - du möchtest mit unserer Hilfe bei deinem Tut oder Prof gut darstehen. Such doch bitte mal nach Hausaufgaben in diesem Forum, und lies dir den Eintrag "An alle Informatikstudenten" durch.

Vorschlag: Sag uns doch einfach, wo dein Problem ist bzw. was für einen Fehler du bekommst. Und poste die Fehlerausgabe mit!
Dann können wir dir eher weiterhelfen.

mfg, querdenker

Verfasst: Mittwoch 11. Januar 2006, 11:15
von Thyestes
Bei Python kann ich ja verschiedene Biblotheken importieren:
z.b.: from xxx import yesno
Was muss ich für xxx einsetzen?Einen Ordner? Sind diese Biblotheken bei Python schon integriert? Oder muss ich mir diese irunterladen?
Das Programm funktioniert nicht:

Traceback (most recent call last):
File "E:/Python24/tt.py", line 1, in -toplevel-
from mytools import yesno
ImportError: No module named mytools

Code: Alles auswählen

from mytools import yesno
def intro():
    print """
Denke dir eine Zahl zwischen 1 und 100 aus.
Ich werde versuchen, diese Zahl zu erraten.
Gib ein:
 + , wenn mein Tipp zu klein ist.
 - , wenn mein Tipp zu groß ist.
 = , wenn mein Tipp stimmt.
Hast du deine Zahl? Dann drücke die Eingabetaste!
"""
    irgendwas = raw_input()
def cspiel():
    intro()
    unten, oben = 1, 100
    erraten = 0
    versuche = 0
    while not erraten:
       versuche = versuche + 1
       tipp = (unten + oben) // 2
       frage = "Ist deine Zahl %d? " % tipp
       antwort = raw_input(frage)
       if antwort == "+":
           unten = tipp+1
       elif antwort == "-":
           oben = tipp-1
       elif antwort == "=":
           erraten = 1
       else:
           print "Das ist eine ungültige Antwort!"
           print "Antworte mit +/=/-"
           versuche = versuche - 1
       if unten == oben:
           tipp = unten
           erraten = 1
    print ("Ich habe mit %d Fragen herausgefunden:"
% versuche)
    print "Deine Zahl ist %d!" % tipp
def zahlenraten():
    print " Z A H L E N R A T E N"
    print " ====================="
    print
    weiterspielen = 1
    while weiterspielen:
        cspiel()
        weiterspielen = yesno("Noch ein Spiel?")
    print
    print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
    zahlenraten()

Verfasst: Mittwoch 11. Januar 2006, 11:46
von querdenker
mytools muss entweder im Python-Suchpfad sein oder in dem Order liegen, in dem auch deine Haupt-Datei liegt

mfg, querdenker

Verfasst: Mittwoch 11. Januar 2006, 11:48
von jens
Thyestes hat geschrieben:z.b.: from xxx import yesno
Was muss ich für xxx einsetzen?Einen Ordner? Sind diese Biblotheken bei Python schon integriert? Oder muss ich mir diese irunterladen?
Schau dir mal das an: http://pythonwiki.pocoo.org/Modul_Import

Verfasst: Mittwoch 11. Januar 2006, 17:20
von Thyestes
Den Ordner habe ich (Tool bei mir). Aber yesno kann ich nicht finden.
Ich finde unter tools folgendes bild vor
Bild

Verfasst: Mittwoch 11. Januar 2006, 17:25
von jens
Warum programmierst du dir nicht einfach yesno selber??? Schau mal hier: http://www.python-forum.de/viewtopic.php?p=27542#27542

Verfasst: Mittwoch 11. Januar 2006, 18:21
von Thyestes
Das programm geht, aber mit yesno funzt noch nicht. Der Benutzer wird nicht gefragt, ob er weiter machen möchte

Code: Alles auswählen

def intro():
    print """
Denke dir eine Zahl zwischen 1 und 100 aus.
Ich werde versuchen, diese Zahl zu erraten.
Gib ein:
 + , wenn mein Tipp zu klein ist.
 - , wenn mein Tipp zu groß ist.
 = , wenn mein Tipp stimmt.
Hast du deine Zahl? Dann drücke die Eingabetaste!
"""
    irgendwas = raw_input()
def cspiel():
    intro()
    unten, oben = 1, 100
    erraten = 0
    versuche = 0
    while not erraten:
       versuche = versuche + 1
       tipp = (unten + oben) // 2
       frage = "Ist deine Zahl %d? " % tipp
       antwort = raw_input(frage)
       if antwort == "+":
           unten = tipp+1
       elif antwort == "-":
           oben = tipp-1
       elif antwort == "=":
           erraten = 1
       else:
           print "Das ist eine ungültige Antwort!"
           print "Antworte mit +/=/-"
           versuche = versuche - 1
       if unten == oben:
           tipp = unten
           erraten =  1
    print ("Ich habe mit %d Frage(n) herausgefunden:"
% versuche)
    print "Deine Zahl ist %d!" % tipp
def zahlenraten():
    print " Z A H L E N R A T E N"
    print " ====================="
    print
    weiterspielen = 1
    while weiterspielen:
        cspiel()
    while(raw_input('Wiederholen? ') == 'Ja'): 
        pass 

    print
    print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
    zahlenraten()
Edit (Leonidas): Highlighting auf Python gesetzt.

Verfasst: Mittwoch 11. Januar 2006, 18:31
von Joghurt
Thyestes hat geschrieben:

Code: Alles auswählen

    weiterspielen = 1
    while weiterspielen:
        cspiel()
    while(raw_input('Wiederholen? ') == 'Ja'): 
        pass
Richtig wäre z.B.

Code: Alles auswählen

weiterspielen = True
while weiterspielen:
  cspiel()
  
  # nun entweder
  weiterspielen = raw_input("Wiederholen? ") == 'Ja'
  # oder, leserlicher
  if raw_input("Wiederholen ?") != 'Ja':
    weiterspielen = False
  # ende

Verfasst: Mittwoch 11. Januar 2006, 19:01
von Thyestes
bekomme einen Error in Zeile 46:

Code: Alles auswählen

def intro():
    print """
Denke dir eine Zahl zwischen 1 und 100 aus.
Ich werde versuchen, diese Zahl zu erraten.
Gib ein:
 + , wenn mein Tipp zu klein ist.
 - , wenn mein Tipp zu groß ist.
 = , wenn mein Tipp stimmt.
Hast du deine Zahl? Dann drücke die Eingabetaste!
"""
    irgendwas = raw_input()
def cspiel():
    intro()
    unten, oben = 1, 100
    erraten = 0
    versuche = 0
    while not erraten:
       versuche = versuche + 1
       tipp = (unten + oben) // 2
       frage = "Ist deine Zahl %d? " % tipp
       antwort = raw_input(frage)
       if antwort == "+":
           unten = tipp+1
       elif antwort == "-":
           oben = tipp-1
       elif antwort == "=":
           erraten = 1
       else:
           print "Das ist eine ungültige Antwort!"
           print "Antworte mit +/=/-"
           versuche = versuche - 1
       if unten == oben:
           tipp = unten
           erraten = 1
    print ("Ich habe mit %d Fragen herausgefunden:"
% versuche)
    print "Deine Zahl ist %d!" % tipp
def zahlenraten():
    print " Z A H L E N R A T E N"
    print " ====================="
    print
    weiterspielen = True
    while weiterspielen:
        cspiel()
      if raw_input("Wiederholen ?") != 'Ja': 
        weiterspielen = False 

    print
    print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
    zahlenraten()
[/code]

Verfasst: Mittwoch 11. Januar 2006, 19:13
von Mr_Snede
Aus dem Stehgreif: Einrückungsfehler?
sollte die Zeile 45 nicht die gleiche Einrückungstiefe haben wie Zeile 46?

Tipp:
Die Python Fehlermeldungen sind recht hilfreich und ausführlich. Sie gehören wie der Quellcode zu deiner Frage/Problem. Bitte poste sie auch.
Dann kann man gezielt Fehler suchen.


cu Sebastian

Verfasst: Mittwoch 11. Januar 2006, 20:39
von Thyestes
Sysntax error:
unindent does not match any outerindentation level

Verfasst: Mittwoch 11. Januar 2006, 20:43
von Leonidas
Thyestes hat geschrieben:Sysntax error:
unindent does not match any outerindentation level
Dann ist es genau wie Mr_Snede gesagt hat: die Zeile ist falsch eingerückt.

Verfasst: Mittwoch 11. Januar 2006, 22:21
von Thyestes
danke. Mit dem Zeileneinrücken habe ich noch meine probleme