Seite 1 von 1
kleines Zahlenrätsel
Verfasst: Samstag 3. Oktober 2009, 11:20
von Jatch
Hiho,
ich bin gerade dabei, ein kleines Zahlenrätsel zu schreiben und komme nicht ganz weiter.
Also, das Programm soll eine zufällige Zahl erstellen. Der Spieler soll diese Zahl erraten, in dem er seine Vorschläge eingibt. Ist die Zahl zu groß bzw. zu klein soll das auch ausgegeben werden.
Code: Alles auswählen
#! /usr/bin/python
# -*- coding: utf-8 -*-
import random
x= int(random.randint(1, 100))
y= int(raw_input('ihre Zahl: '))
i=int(0)
if x!=y:
while i=int(0):
if x > y :
print 'Diese Zahl ist zu klein'
y=int(raw_input('ihre größere Zahl: ')
elif x < y :
print 'Diese Zahl ist zu groß'
y=int(raw_input('ihre kleinere Zahl: '))
elif x == y:
i=int(1)
print 'richtig!'
else:
print 'richtig!'
folgender Fehler erscheint:
while i=int(0):
^
SyntaxError: invalid syntax
Wäre schön, wenn mir jmd auf die Sprünge helfen könnte.
Verfasst: Samstag 3. Oktober 2009, 11:27
von cofi
Du brauchst die ganzen `int`-Aufrufe nicht, nur in den `raw_input` Zeilen sind sie notwendig.
Ich helf dir mal so viel, dass der Fehler in der richtigen Zeile angezeigt wird, aber beim falschen Zeichen. Schau vielleicht mal in Zeile 18.
Daneben sind Zeile 19 & 20 falsch eingerueckt.
PEP 8 solltest du dir auch mal anschaun und sinnvolle Variablennamen erleichtern das Programmieren sehr

Verfasst: Samstag 3. Oktober 2009, 11:29
von sma
`i = int(0)` ist eine Anweisung. Das Argument von `while` muss ein Ausdruck sein. Daher der Syntaxfehler. Anweisungen sind Befehle an den Computer, sie haben kein Ergebnis. Ausdrücke hingegen berechnen ein Ergebnis. Wie auch immer, das `i=int(0)` ist an allen Stellen, wo du es benutzt Blödsinn. Im ersten Fall meinst du i = 0, im zweiten Fall (der Ausdruck) meist du i und im dritten Fall meinst du i = 1. Aber auch das ist noch unschön, denn `while` sollte einen Boolschen-Wahrheitswert benutzen. Dafür gibt es True und False in Python. Und selbst das ist noch nicht optimal, denn du brauchst gar keinen solchen Wert, sondern kannst einfach an der Stelle, wo du eine mit `while True` gebildete Schleife abbrechen willst, Die Anweisung `break` benutzen.
Stefan
PS: Lass das `int` bei random.randint weg und lerne, was int eigentlich macht...
Verfasst: Samstag 3. Oktober 2009, 11:59
von Jatch
Danke für eure Hilfen (und Tipps),
jetzt klappt es soweit.
Code: Alles auswählen
#! /usr/bin/python
# -*- coding: utf-8 -*-
import random
x= random.randint(1, 100)
y= int(raw_input('ihre Zahl: '))
i=False
if x!=y:
while i == False:
if x > y :
print 'Diese Zahl ist zu klein'
y=int(raw_input('ihre größere Zahl: '))
elif x < y :
print 'Diese Zahl ist zu groß'
y=int(raw_input('ihre kleinere Zahl: '))
elif x == y:
print 'richtig!'
break
else:
print 'richtig!'
Jetzt versuch ich noch die gebrauchten Versuche anzeigen zu lassen,
bis später

Verfasst: Samstag 3. Oktober 2009, 12:31
von EyDu
Ich habe meine Vorschläge gleich mal in Code umgesetzt:
Code: Alles auswählen
import random
def zahlenraten():
zahl = random.randint(1, 100)
while True:
geraten = int(raw_input("Ihre Zahl:"))
if geraten < zahl:
print "Diese Zahl ist zu klein"
elif geraten > zahl:
print "Diese Zahl ist zu gross"
else:
print "Richtig!"
if __name__ == "__main__":
zahlenraten()
Und mit noch ein wenig Fehlerbehandlung:
Code: Alles auswählen
import random
def zahlenraten():
zahl = random.randint(1, 100)
while True:
try:
geraten = int(raw_input("Ihre Zahl:"))
if geraten < zahl:
print "Diese Zahl ist zu klein"
elif geraten > zahl:
print "Diese Zahl ist zu gross"
else:
print "Richtig!"
except ValueError:
print "Die Eingabe war keine Zahl"
if __name__ == "__main__":
zahlenraten()
Du solltest übrigens keine Tabs uns Spaces vermischen oder dein Editor so einstellen, dass Tabs in Leerzeichen umgewandelt werden. Empfohlen werden vier Leerzeichen pro Einrückungsstufe.
Verfasst: Samstag 3. Oktober 2009, 12:43
von cofi
EyDu hat geschrieben:Du solltest übrigens keine Tabs uns Spaces vermischen
Um den Grund mal nachzuliefern: Der Interpreter kann sich daran verschlucken.
@EyDu: Dir fehlt ein `break` im `else` Zweig
