kleines Zahlenrätsel

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
Jatch
User
Beiträge: 8
Registriert: Freitag 2. Oktober 2009, 16:19
Kontaktdaten:

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ;)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

`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...
Jatch
User
Beiträge: 8
Registriert: Freitag 2. Oktober 2009, 16:19
Kontaktdaten:

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 :D :D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 8)
Antworten