Zahlen erraten (einfach)

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
bastuuu
User
Beiträge: 1
Registriert: Montag 25. Dezember 2006, 14:39

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.
Huhu ^^
chell
User
Beiträge: 21
Registriert: Sonntag 24. September 2006, 08:45

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"
Danke,

chell
chell
User
Beiträge: 21
Registriert: Sonntag 24. September 2006, 08:45

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.
Danke,

chell
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Bitte statt input() int(raw_input()) verwenden, sonst habt ihr eine schöne Fehlerquelle/Sicherheitslücke.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
chell
User
Beiträge: 21
Registriert: Sonntag 24. September 2006, 08:45

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?
Danke,

chell
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Schildi
User
Beiträge: 30
Registriert: Freitag 19. Mai 2006, 22:23
Kontaktdaten:

'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
by: Schildi
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?
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

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
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. ;-)
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

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
Antworten