Seite 1 von 1

Anfänger Fragen! zu kleinem Spiel

Verfasst: Montag 26. März 2007, 22:20
von Indiziert
Hallo zusammen,

erstmal möchte ich sagen das ich das forum hier ganz toll finde, habe auch schon viele turtorials gefunden die mir sehr weitergeholfen haben, nun ich bin ein blutiger Programmieranfänger, und Python ist meine erste Sprache überhaupt, leider komme ich nicht um ein paar anfängerfragen drum rum!

ich habe angefangen ein kleines Shell spiel zu programmieren, das durch einen Zufahlsgenerator eine zahl generiert und ich man diese durch eingaben erraten muss, dazu gibts hilfen ob die zahl kleiner oder größer ist!

habe es schon etwas erweiter, mit punktesystem etc.
jetzt will ich es so Programmieren das mehrere Spieler dran teilnehmen können...
könntet ihr mir verraten bzw eine anregung geben wie ich einen 2-Spieler-Modus programmieren kann, indem die Spieler nacheinander spielen können!

und noch eine frage!
ich habe ein break-anweisung geschrieben

Code: Alles auswählen

def abbruch():
	if ben_nochmal == "n":
		break
	else:
		continue
wenn ich diese funktion nun einbinde in eine Weitere While-Schleife kommt immer:
File "zahlenraten.py", line 23
break
SyntaxError: 'break' outside loop
aber wenn ich diese Break-anweisung direkt in die while-schleife schreibe dan funktioniert sie!

mfg

Verfasst: Montag 26. März 2007, 23:46
von nkoehring
Also zu deiner Frage kann ich dir gern weiterhelfen...

``break`` funktioniert nur direkt in einer Schleife. Das heißt:

Code: Alles auswählen

while True:
    if ja_so_ist_es(): break
...laeuft solang durch, bis die Funktion ``ja_so_ist_es()`` einen als True wertbaren Wert zurueck gibt (also weder die Zahl Null, False oder None, noch leere Listen, Dictionaries oder Tuples).

Die break-Anweisung wirkt hier auf das direkte Elternelement, also "while".

Code: Alles auswählen

while True:
    some_code()
    def halt():
        break
    if ja_so_ist_es(): halt()
...wird nicht Funktionieren, da das break hier nicht ``while``, sondern die Funktion ``halt()`` als Elternelement hat. Daher der Fehler: 'break' outside loop ;)

Verfasst: Dienstag 27. März 2007, 07:51
von Shana
Wenn du eine Funktion abbrechen möchtest, dann musst du dies mit 'return' tun.

Code: Alles auswählen

def foo:
    if 1 == 2:
         return
die Funktion bricht dann sofort ab. Nach dem Return darf noch was übergeben werden, das was die Funktion zurückliefert.
Indiziert hat geschrieben:

Code: Alles auswählen

def abbruch():
	if ben_nochmal == "n":
		break
	else:
		continue
In diesem Fall musst du also das break durch return ersetzen, dann funktioniert es so, wie du es wahrscheinlich möchtest :D

Verfasst: Dienstag 27. März 2007, 08:19
von CM
Shana hat geschrieben: In diesem Fall musst du also das break durch return ersetzen, dann funktioniert es so, wie du es wahrscheinlich möchtest :D
Wenn ich raten darf - was ich muß, da der Teil des Codes nicht angegeben ist - wird das überhaupt nichts bringen, weil die Funktion in einer Schleife aufgerufen wird. Die wird daher also nicht beende, sondern nur langsamer. Besser ist es in diesem Fall wohl den Weg zu gehen, den nkoehring vorgezeichnet hat.

Gruß,
Christian

Verfasst: Dienstag 27. März 2007, 08:25
von Masaru
Die Funktion bricht weniger ab als dass sie mit einem Wert zu dem Aufrufer zurückkommt ... diesem einen Wert zurückliefert.

Code: Alles auswählen

def test():
    return # <--- ist äquivalent zu: Return None
Sofern Methoden nicht in einer Endlosschleife hängen oder durch eine Exception abgebrochen werden, enden sie mit einem definierten Rückgabewert oder eben keinem (in vielen Hochsprachen nutzt man ja das bekannte "void").

Da Python kein "void" kennt, würde eine Methode die komplett durchlaufen ist und eben keinen expliziten Rückgabewert codiert bekommen hat, halt eben "None" an Ihren Aufrufer zurückliefern.