Seite 1 von 1

Zahlen erraten (einfach)

Verfasst: Montag 25. Dezember 2006, 14:45
von bastuuu
Also, ich hab in der Boardsuche nichts gefunden, deswegen schreibe ich mal einen Thread.

1. Ich hatte früher in der Schule mit Python zutun, deswegen hab ich ein kleines Vorwissen, aber ich habs ehrlich gesagt wieder vergessen.

So zu meinem "für euch warscheinlich einfachen" Problem.
ich fahre mit freunden weg und möchte nun ein programm schreiben, wo man Zahlen erraten muss.

Sprich:
Zahl wird ausgelost , man gibt eine Zahl ein und es kommt das Ergebnis, zu hoch, zu niedrig oder ist richtig.

Mein Problem bisher, es gibt alles aus, nur halt einmal.
Ich möchte aber, wenn es zu niedrig ist, dass man die Chance hat nocheinmal weiter zu raten.

Code: Alles auswählen

import random
zahl = random.randint(1,9)
ratezahl = input("Komm schon ihr Säufer, ratet ne Zahl")
if ratezahl == zahl : print "Richtiiiiig!"
if ratezahl <= zahl : print "Ich glaube die Zahl ist höher, SAUFEN!" 
if ratezahl >= zahl : print "Die Zahl ist leider niedriger, SAUFEN!" 
Sorry, wenn es zu einfach ist, aber ich hab alles irgendwie vergessen :)

Edit (Leonidas): Code-Highlighting eingeschaltet.

Verfasst: Montag 25. Dezember 2006, 14:49
von chell
Wow, was für ein Zufall. An genau so einem Spiel arbeite ich gerade. Bis jetzt habe ich folgendes Implementiert:

1. Man muss eine Zahl erraten.
2. Man bekommt bei zu großer bzw. zu kleiner geratener Zahl eine entsprechende Meldung.
3. Die Anzahl der Versuche wird gemessen.

Woran ich noch arbeite ist:

1. Die Zeit (in Sekunden) wird gemessen, die man gebraucht hat.
2. (wenn sinnvoll) Man kann die Anzahl der Durchläufe festlegen.

Hier also mein Quellcode:

Code: Alles auswählen


# Zahlenraten.py
# - Ein Zahlenraten-Spiel!

import random
random_number = random.randint(1, 100)
usernumber = 0
counter = 0
zeit = 0
while usernumber != random_number:
    usernumber = input()
    if usernumber > random_number:
        print "zu groß"
    elif usernumber < random_number:
        print "zu klein"
    counter += 1
print "Glückwunsch!, du hast ", counter, "Versuche", "in", zeit, "Sekunden", "gebraucht"

Verfasst: Montag 25. Dezember 2006, 14:51
von chell
Was für dich noch wichtig ist:

Du darfst die Schleife nicht vergessen, die so lange den User über "zu groß" oder "zu klein" informiert, bis dieser die richtige Zahl erwischt hat.

Verfasst: Dienstag 26. Dezember 2006, 21:17
von Leonidas
Bitte statt input() int(raw_input()) verwenden, sonst habt ihr eine schöne Fehlerquelle/Sicherheitslücke.

Verfasst: Mittwoch 27. Dezember 2006, 09:38
von chell
Leonidas hat geschrieben:Bitte statt input() int(raw_input()) verwenden, sonst habt ihr eine schöne Fehlerquelle/Sicherheitslücke.
Warum? In wiefern kann es eine Fehlerquelle/Sicherheitslücke darstellen?

Verfasst: Mittwoch 27. Dezember 2006, 10:28
von rafael
chell hat geschrieben:
Leonidas hat geschrieben:Bitte statt input() int(raw_input()) verwenden, sonst habt ihr eine schöne Fehlerquelle/Sicherheitslücke.
Warum? In wiefern kann es eine Fehlerquelle/Sicherheitslücke darstellen?
Der Nutzer des Programms könnte ja auch einen String anstatt einer Zahl angeben. Und raw_input() weil bei input() muss die Eingabe ein gültiger Python-Ausdruck sein.

mfg
rafael

Verfasst: Mittwoch 27. Dezember 2006, 12:11
von Leonidas
chell hat geschrieben:Warum? In wiefern kann es eine Fehlerquelle/Sicherheitslücke darstellen?
Weil input() die Eingabe des Users ausführt. So kann der User etwa os.remove('/') oder ähnliches eingeben und das ist dann nicht mehr so lustig.

Verfasst: Samstag 30. Dezember 2006, 20:40
von Schildi
'nabend.

weiß nich, ob ich zu spät bin, aber da ich wegen der Schule mit Delphi fremdgehen musste, wollte ich auch mal wieder was in Python machen und hab das Programm vom Anfang mal so geschrieben, dass es funktioniert^^ :lol:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import random

zahl = random.randint(1, 9)
ratezahl = int(raw_input("Kommt schon ihr Säufer, ratet ne Zahl "))

while 1:
    if ratezahl < zahl:
        print "Ich glaube die Zahl ist höher, SAUFEN!"
        ratezahl = int(raw_input("Kommt schon ihr Säufer, ratet ne Zahl "))
        
    elif ratezahl > zahl:
        print "Die Zahl ist leider niedriger, SAUFEN!"
        ratezahl = int(raw_input("Kommt schon ihr Säufer, ratet ne Zahl "))
        
    elif ratezahl == zahl:
        print "Richtiiiiig!"
        break
kann man natürlich noch anders bzw. kürzer schreiben, aber so geht's auf jeden Fall ;)

mfG, Schildi

Verfasst: Samstag 30. Dezember 2006, 22:07
von BlackJack
Wie wär's wenn Du nur an *einer* Stelle eine Zahl vom Benutzer einliest, und zwar gleich als erstes in der ``while``-Schleife?

Verfasst: Samstag 30. Dezember 2006, 22:18
von sape
Tststs, jetzt muss schon Python für Zecherspiele herhalten...

Und weils richtig fies sein soll, verfrachten wir _alles_ in die ``while``-Schleife :twisted: ^^

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random

print ("Wenn 999999 eingegeben wurde, wird das Programm beendet ^^"
       "Koennte noetig werden ^^"
)

while 1:
    zahl = random.randint(1, 9)
    ratezahl = int(raw_input("Kommt schon ihr Säufer, ratet ne Zahl "))

    if ratezahl < zahl:
        print "Ich glaube die Zahl ist höher, SAUFEN!"
    elif ratezahl > zahl:
        print "Die Zahl ist leider niedriger, SAUFEN!"
    elif ratezahl == zahl:
        print "Richtiiiiig!"
        break
    elif ratezahl == 999999:
        print 'OK, dann hoeren wir mal auf zu "raten" ;)'
        break

Verfasst: Sonntag 31. Dezember 2006, 20:29
von Gnushi
sape hat geschrieben:

Code: Alles auswählen

...
while 1:
    zahl = random.randint(1, 9)
    ....
   
Hier wird aber immer eine neue Ratezahl generiert, das bedeutet, daß die Angaben "höher" und "niedriger" nichts bringen.

Gnushi

Verfasst: Sonntag 31. Dezember 2006, 20:56
von BlackJack
Natürlich bringen die was: Verwirren den Spieler und es muss mehr gesoffen werden. Das hat einen Grund warum sape den bösen Smiley gesetzt hat und etwas von *richtig fies* schrieb. ;-)

Verfasst: Montag 1. Januar 2007, 20:38
von Gnushi
BlackJack hat geschrieben:Verwirren den Spieler und es muss mehr gesoffen werden.
Ich befürchte, ich habe das Spiel vor dem Posten zu oft gespielt (gesoffen) und deswegen den Witz nicht kapiert. :oops:

Frohes Neues!

Gnushi