Anfänger Fragen! zu kleinem Spiel

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
Indiziert
User
Beiträge: 1
Registriert: Montag 26. März 2007, 21:12

Montag 26. März 2007, 22:20

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Montag 26. März 2007, 23:46

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 ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
Shana
User
Beiträge: 28
Registriert: Dienstag 22. August 2006, 11:58
Wohnort: Bremen
Kontaktdaten:

Dienstag 27. März 2007, 07:51

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 27. März 2007, 08:19

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
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Dienstag 27. März 2007, 08:25

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.
Antworten