Zahlenraten mit Pyhon

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.
Antworten
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

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!"
BlackJack

Eigentlich wollte ich Deinen Quelltext in Code-Tags setzen, aber leider ist er überhaupt nicht eingerückt. Das solltest Du mal "reparieren".
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

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
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

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()
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

mytools muss entweder im Python-Suchpfad sein oder in dem Order liegen, in dem auch deine Haupt-Datei liegt

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

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Den Ordner habe ich (Tool bei mir). Aber yesno kann ich nicht finden.
Ich finde unter tools folgendes bild vor
Bild
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Warum programmierst du dir nicht einfach yesno selber??? Schau mal hier: http://www.python-forum.de/viewtopic.php?p=27542#27542

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

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]
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

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
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Sysntax error:
unindent does not match any outerindentation level
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

danke. Mit dem Zeileneinrücken habe ich noch meine probleme
Antworten