Raterätsel

Code-Stücke können hier veröffentlicht werden.
Antworten
Binnichtgut
User
Beiträge: 4
Registriert: Sonntag 20. März 2011, 09:29

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, ...) :?:
Zuletzt geändert von Binnichtgut am Mittwoch 13. Juli 2011, 12:53, insgesamt 1-mal geändert.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

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
Binnichtgut
User
Beiträge: 4
Registriert: Sonntag 20. März 2011, 09:29

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."
Zuletzt geändert von Binnichtgut am Montag 3. Oktober 2011, 05:11, insgesamt 1-mal geändert.
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.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

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
Zuletzt geändert von Lasse am Donnerstag 24. März 2011, 15:29, insgesamt 1-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

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()).
Antworten