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.
-
Thyestes
- User
- Beiträge: 23
- Registriert: Dienstag 10. Januar 2006, 22:38
Dienstag 24. Januar 2006, 14:25
Hallo,
ich habe eine kleine (für mich irgendwie schwere) Aufgabe:
Wie muss ich das untenstehende Programm ändern, damit der Computer eine Zahl randomiert und der Nutzer diese Zahl rät. Angeblich soll man nur 2-3 Zeilen ändern müssen, aber ich komme einfach nicht drauf.
Danke im Voraus
Code: Alles auswählen
import random
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 = random.randint(unten,oben)
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
print "Deine Zahl ist %d!" % tipp
print ("Ich habe mit %d Fragen herausgefunden,welche Zahl du dir überlegt hast. Dies ist: "
% versuche)
if versuche==1:
print("Super")
if versuche==2:
print("Super")
if versuche==3:
print("Sehr gut")
if versuche==4:
print("Sehr gut")
if versuche==5:
print("Gute Leistung")
if versuche==6:
print("Mittelmäßige Leistung")
if versuche==7:
print("Mittelmäßige Leistung")
if versuche==8:
print("Mittelmäßige Leistung")
if versuche>8:
print("Schwache Leistung")
print
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/Nein ?") != 'Ja':
weiterspielen = False
print
print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
zahlenraten()
Zuletzt geändert von
Thyestes am Dienstag 24. Januar 2006, 14:30, insgesamt 1-mal geändert.
-
modelnine
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
-
Kontaktdaten:
Dienstag 24. Januar 2006, 14:27
Ganz so einfach ist es nicht... Du mußt vor allen Dingen vorsehen dass der Benutzer eine Zahl eingibt und nicht "+", "-" und "=", und dann diese Zahl entsprechend interpretieren.
--- Heiko.
-
Thyestes
- User
- Beiträge: 23
- Registriert: Dienstag 10. Januar 2006, 22:38
Dienstag 24. Januar 2006, 14:58
Das Prog zeigt jetzt keinen Fehler an, aber jedesmal bekomme ich : " Deine Zahl, die du dir ausgedacht hast ist zu groß"
[
Code: Alles auswählen
import random
def intro():
print """
Eine Zahl zwischen 1 und 100 denke ich mir nun aus. Du musst diese erraten oder auch eben nicht
Bereit? Dann drücke die Eingabetaste!
"""
irgendwas = raw_input()
def cspiel():
intro()
unten, oben = 1, 100
zahl= random.randint(unten,oben)
erraten = 0
versuche = 0
while not erraten:
versuche = versuche + 1
tipp = "Rate nun eine Zahl zwischen 1 und 100 "
antwort = input(tipp)
if tipp == zahl:
erraten = 1
elif tipp < zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu klein"
elif tipp > zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu groß"
print
print
print ("Du hast mit %d Fragen herausgefunden,welche Zahl mein Speicher sich randomiert hat. Dies ist: "
% versuche)
if versuche==1:
print("Super")
if versuche==2:
print("Super")
if versuche==3:
print("Sehr gut")
if versuche==4:
print("Sehr gut")
if versuche==5:
print("Gute Leistung")
if versuche==6:
print("Mittelmäßige Leistung")
if versuche==7:
print("Mittelmäßige Leistung")
if versuche==8:
print("Mittelmäßige Leistung")
if versuche>8:
print("Schwache Leistung")
print
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/Nein ?") != 'Ja':
weiterspielen = False
print
print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
zahlenraten()
Zuletzt geändert von
Thyestes am Dienstag 24. Januar 2006, 15:29, insgesamt 1-mal geändert.
-
jens
- Moderator
- Beiträge: 8483
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
-
Kontaktdaten:
Dienstag 24. Januar 2006, 15:24
Thyestes hat geschrieben:Dateien\Sarah.py", line 16, in cspiel
frage = "Rate nun eine Zahl zwischen 1 und 100 " % tipp
NameError: global name 'tipp' is not defined
Bin ich blind, oder kommt die Zeile überhaupt nicht in deinem Skript vor???
Das "% tipp" macht auch keinen Sinn, weil in dem Skript überhaupt kein String-Operator-Platzhalter ist...
-
Thyestes
- User
- Beiträge: 23
- Registriert: Dienstag 10. Januar 2006, 22:38
Dienstag 24. Januar 2006, 15:39
das argument ist doch aber kein String , sondern eine zahl(oder spinn ich?)
habe es eingebaut, bringt aber nichts
Code: Alles auswählen
import random
def intro():
print """
Eine Zahl zwischen 1 und 100 denke ich mir nun aus. Du musst diese erraten oder auch eben nicht
Bereit? Dann drücke die Eingabetaste!
"""
irgendwas = raw_input()
def cspiel():
intro()
zahl= random.randint(1,100)
erraten = 0
versuche = 0
while not erraten:
versuche = versuche + 1
tipp = "Rate nun eine Zahl zwischen 1 und 100 "
antwort = input(tipp)
print type(antwort)
if tipp == zahl:
erraten = 1
elif tipp < zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu klein"
elif tipp > zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu groß"
print
print
print ("Du hast mit %d Fragen herausgefunden,welche Zahl mein Speicher sich randomiert hat. Dies ist: "
% versuche)
if versuche==1:
print("Super")
if versuche==2:
print("Super")
if versuche==3:
print("Sehr gut")
if versuche==4:
print("Sehr gut")
if versuche==5:
print("Gute Leistung")
if versuche==6:
print("Mittelmäßige Leistung")
if versuche==7:
print("Mittelmäßige Leistung")
if versuche==8:
print("Mittelmäßige Leistung")
if versuche>8:
print("Schwache Leistung")
print
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/Nein ?") != 'Ja':
weiterspielen = False
print
print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
zahlenraten()
-
mr.hide
- User
- Beiträge: 108
- Registriert: Montag 29. August 2005, 14:02
Dienstag 24. Januar 2006, 15:41
Über die Kommandozeile Eingelesenes wird immer als string betrachtet.
Mach doch einfach einen typecast.
Grüße
Matthias
- Fluchen befreit von Kummer und Leid -
-
jens
- Moderator
- Beiträge: 8483
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
-
Kontaktdaten:
Dienstag 24. Januar 2006, 15:43
Du hast recht, es ist eine Zahl.... Aber input scheint mir nicht so brauchbar zu sein (generell nicht) denn
aus der Doku ist zu lesen:
Equivalent to eval(raw_input(prompt)). Warning: This function is not safe from user errors!
Also besser:
Und das ganze noch in eine try-except einschließen, falls keine Zahl eingegebnen wurde...
-
Thyestes
- User
- Beiträge: 23
- Registriert: Dienstag 10. Januar 2006, 22:38
Dienstag 24. Januar 2006, 15:51
ging auch ncht. Jetzt habe ich es einfacher gemacht, so wie ich es gelernt habe. Und siehe da, es funktioniert.Danke an alle
Code: Alles auswählen
import random
def intro():
print """
Eine Zahl zwischen 1 und 100 denke ich mir nun aus. Du musst diese erraten oder auch eben nicht
Bereit? Dann drücke die Eingabetaste!
"""
irgendwas = raw_input()
def cspiel():
intro()
zahl= random.randint(1,100)
erraten = 0
versuche = 0
while not erraten:
versuche = versuche + 1
tipp = input ("Rate nun eine Zahl zwischen 1 und 100 ")
if tipp == zahl:
erraten = 1
elif tipp < zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu klein"
elif tipp > zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu groß"
print
print
print ("Du hast mit %d Fragen herausgefunden,welche Zahl mein Speicher sich randomiert hat. Dies ist: "
% versuche)
if versuche==1:
print("Super")
if versuche==2:
print("Super")
if versuche==3:
print("Sehr gut")
if versuche==4:
print("Sehr gut")
if versuche==5:
print("Gute Leistung")
if versuche==6:
print("Mittelmäßige Leistung")
if versuche==7:
print("Mittelmäßige Leistung")
if versuche==8:
print("Mittelmäßige Leistung")
if versuche>8:
print("Schwache Leistung")
print
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/Nein ?") != 'Ja':
weiterspielen = False
print
print "Ich hoffe, du hattest Spaß mit mir!"
if __name__ == "__main__":
zahlenraten()
-
jens
- Moderator
- Beiträge: 8483
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
-
Kontaktdaten:
Dienstag 24. Januar 2006, 16:08
Also ich würde allerdings wirklich kein input nehmen!!!
Tausch doch das mal aus:
Code: Alles auswählen
while not erraten:
versuche = versuche + 1
tipp = input ("Rate nun eine Zahl zwischen 1 und 100 ")
if tipp == zahl:
erraten = 1
elif tipp < zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu klein"
elif tipp > zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu groß"
mit
Code: Alles auswählen
while 1:
versuche = versuche + 1
try:
tipp = int(raw_input("Rate nun eine Zahl zwischen 1 und 100 "))
except:
print "Bitte nur Zahlen eingeben!"
else:
if tipp == zahl:
break
elif tipp < zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu klein"
elif tipp > zahl:
print " Deine Zahl, die du dir ausgedacht hast ist zu groß"
-
jens
- Moderator
- Beiträge: 8483
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
-
Kontaktdaten:
Dienstag 24. Januar 2006, 16:16
Ach und noch ein Tip... Teile dein Programm in kleinere Häpchen auf Funktionen auf! So das du ganz unten nur noch eine Funktion nach der anderen starten brauchst... So wird alles viel übersichtlicher als es jetzt ist!
-
modelnine
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
-
Kontaktdaten:
Dienstag 24. Januar 2006, 17:46
Hier mal meine "quick and dirty"-Implementierung des ganzen... Vielleicht kannst Du da ja noch was draus lernen.
Code: Alles auswählen
# -*- coding: iso-8859-15 -*-
import random
minzahl = 1
maxzahl = 100
meinezahl = random.randrange(minzahl,maxzahl)
i = 0
while True:
try:
val = int(raw_input("Dein Vorschlag? "))
if not minzahl <= val <= maxzahl:
raise ValueError
i += 1
except ValueError:
print "Bitte einen gültigen Vorschlag eingeben..."
continue
if val < meinezahl:
print "Meine Zahl ist größer..."
elif val > meinezahl:
print "Meine Zahl ist kleiner..."
else:
break
print "Danke für's Raten nach %s Versuchen!" % i
if i in (1,2):
print "Super"
elif i in (3,4):
print "Sehr gut"
elif i == 5:
print "Gute Leistung"
elif i in (6,7,8):
print "Mittelmäßige Leistung"
else:
print "Schwache Leistung"
--- Heiko.