Seite 1 von 1
Raterätsel
Verfasst: Sonntag 20. März 2011, 09:40
von Binnichtgut
Hallo!
Ich hab' hier einen Code für ein Raterätsel:
Code: Alles auswählen
import random
Loes=random.randint(1,20)
a=1
while a==1:
go=0
Zaeh=0
Eing=0
while go==0:
go=input("Tippe 1 zum Starten des Rätsels und 2 zum Start des Tutorials ein__")
if go==1:
while Eing!=Loes:
Eing=input("Suche die Zahl zwischen 1 und 20___________________________________")
Zaeh=Zaeh+1
if Eing < Loes:
print"Zu klein___________________________________________________________"
if Eing > Loes:
print"Zu groß____________________________________________________________"
if Eing==Loes:
if Zaeh!=1:
print"Super, du hast es in", Zaeh ,"Versuchen geschafft!"
if Zaeh==1:
print"Super, du hast es in einem Versuch geschafft!"
if go==2:
print"Dir wird eine Frage gestellt. Wenn du sie falsch beantwortest, kommt eine Meldung und fragt dich noch mal."
print"Wenn du sie aber richtig beantwortest, kommt eine Meldung, wie viele Versuche du benötigt hast. Dann geht alles von vorne los."
Variablen: Loes=Lösung; Zaeh: Zähler; Eing: Eingabe; go=Aktion. Jetzt will ich es noch verbessern. Kann mir jemand Tipps geben (Neue Fragen, ...)

Re: Raterätsel
Verfasst: Sonntag 20. März 2011, 10:37
von Barabbas
Hallo!
Die Zufallszahl ist bei allen Durchgängen immer die gleiche - du musst natürlich bei jedem Durchgang eine neue erstellen

. Außerdem sind die drei verschachtelten Schleifen mMn unnötig - das könnte man sicher straffen. In Zeile 3/4 benutzt du die Variable "a" ausschließlich, um eine Endlosschleife zu erstellen. Das geht mit "while True" auch, dazu brauch es also keine extra Variablen.
Deine Erklärung der Variablen am Ende des Posts ist übrigens schon ein deutlicher Hinweis darauf, dass die Benennung bei dir nicht sonderlich gut ist. Versuche die Variablen so zu benennen, dass der Name den Zweck verrät!
Ganz wichtig auch: In Python 2.x musst du unbedingt raw_input() statt input() benutzen, weil input() die Eingabe gleich auch evaluiert - also als Python-Code interpretiert. Die EIngabe des Nutzers kannst du dann mit int() in eine Ganzzahl umwandeln.
Viel Spaß noch,
brb
Re: Raterätsel
Verfasst: Sonntag 20. März 2011, 12:45
von Binnichtgut
Dann fragt er jedes mal:
"Tippe 1 zum Starten des Rätsels und 2 zum Start des Tutorials ein__"
Also hab' ich lieber nicht raw_input genommen. Die Variablen hab' ich geändert.
Code: Alles auswählen
import random
while True:
go=0
Zaehler=0
Eingabe=0
Loesung=random.randint(1,20)
while go==0:
go=input("Tippe 1 zum Starten des Rätsels und 2 zum Start des Tutorials ein__")
if go==1:
while Eingabe!=Loesung:
Eingabe=int(raw_input("Suche die Zahl zwischen 1 und 20___________________________________"))
Zaehler=Zaehler+1
if Eingabe < Loesung:
print"Zu klein___________________________________________________________"
if Eingabe > Loesung:
print"Zu groß____________________________________________________________"
if Eingabe==Loesung:
if Zaehler!=1:
print"Super, du hast es in", Zaehler ,"Versuchen geschafft!"
if Zaehler==1:
print"Super, du hast es in einem Versuch geschafft!"
if go==2:
print"Dir wird eine Frage gestellt. Wenn du sie falsch beantwortest, kommt eine Meldung und fragt dich noch mal."
print"Wenn du sie aber richtig beantwortest, kommt eine Meldung, wie viele Versuche du benötigt hast. Dann geht alles von vorne los."
Re: Raterätsel
Verfasst: Sonntag 20. März 2011, 13:05
von BlackJack
@Binnichtgut: `raw_input()` gibt eine Zeichenkette zurück, die kann man natürlich nicht mit Zahlen vergleichen, beziehungsweise kommt da dann immer `False` bei dem Vergleich heraus.
Das ``if Eingabe==Loesung:`` ist überflüssig. An der Stelle *muss* das gelten, denn sonst wäre die ``while``-Schleife davor nicht verlassen worden.
Du könntest mit ein paar mehr Leerzeichen die Lesbarkeit erhöhen. Nach Kommata und um binäre Operatoren solltest Du welche setzen. Das macht man in normalen Texten ja auch aus genau dem Grund. Das gleiche gilt für Zuweisungen beim ``=``. Ausnahme sind Argumentlisten bei der Definition oder beim Aufruf.
Namen werden in Python per Konvention klein geschrieben. Nur Klassennamen und Konstanten enthalten üblicherweise Grossbuchstaben.
Re: Raterätsel
Verfasst: Montag 21. März 2011, 17:23
von Lasse
Hallo,
hier ist so ein ähnliches Programm aus dem Buch "Hello World":
Code: Alles auswählen
# Listing_1-2.py
# Copyright Warren Sande, 2009
# Released under MIT license http://www.opensource.org/licenses/mit-license.php
# Version 59 ----------------------------
# Number Guess game
import random
secret = random.randint(1, 99) # pick a secret number
guess = 0
tries = 0
print "AHOY! I'm the Dread Pirate Roberts, and I have a secret!"
print "It is a number from 1 to 99. I'll give you 6 tries. "
# try until they guess it or run out of turns
while guess != secret and tries < 6:
guess = int(raw_input("What's yer guess? ")) # get the player's guess
if guess < secret:
print "Too low, ye scurvy dog!"
elif guess > secret:
print "Too high, landlubber!"
tries = tries + 1 # used up one try
# print message at end of game
if guess == secret:
print "Avast! Ye got it! Found my secret, ye did!"
else:
print "No more guesses! Better luck next time, matey!"
print "The secret number was", secret
Re: Raterätsel
Verfasst: Montag 21. März 2011, 17:30
von /me
Lasse hat geschrieben:hier ist so ein ähnliches Programm aus dem Buch "Hello World":
Das enthält allerdings das böse
input, das man unter Python 2 durch
raw_input und ein entsprechendes Typecasting ersetzen sollte.
Re: Raterätsel
Verfasst: Donnerstag 24. März 2011, 15:31
von Lasse
Sorry, dass Programm ist nur aus dem Buch kopiert und nicht von mir (1.Kapitel). Ich verwende auch immer raw_input() mit Typkonvertierung.
PS: Das Programm oben verwendet jetzt auch int(raw_input()).