Seite 1 von 1
Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 11:09
von Luchs08
Ist mir äußerst peinlich deswegen ein neues Thema zu erstellen, aber ich weiß gerade echt nicht weiter.
Code: Alles auswählen
Klassen = "Elf", "Ork", "Magier", "Mensch", "Halbling"
def Spielstart():
Klasse = ""
while Klasse in Klassen == False:
Klasse = input ("Wähle deine Klasse: ")
Wieso funktioniert das so nicht? Nach dem Aufrufen von Spielstart() passiert einfach nichts. Zum Testen habe ich das mal ein bisschen geändert:
Code: Alles auswählen
if Klasse in Klassen == False:
Klasse = input ("Wähle deine Klasse: ")
else:
print ("X")
Das paradoxe bzw. für mich unverständliche ist, dass egal ob ich "== False" oder "== True" schreibe, es wird immer "X" ausgegeben.
Also, wie schon gesagt, ich bin nicht erfreut extra ein neues Thema zu erstellen, da die Lösung sich bestimmt in einer Zeile beschreiben lässt.

Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 11:16
von cofi
Du willst
nutzen.
Der Grund duerfte sein, dass die Operatoren anders binden als du denkst.
P.S. Wirf mal einen Blick auf PEP8.
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 11:26
von Luchs08
Ok, vielen Dank, funktioniert natürlich. Nur verstehen tu ich's noch nicht ganz. Wo liegt denn da der Unterschied?
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 11:44
von DaMutz
Code: Alles auswählen
In [3]: 'aa' in ['aa', 'bb', 'cc'] == False
Out[3]: False
In [4]: 'aa' in ['ab', 'bb', 'cc'] == False
Out[4]: False
In [5]: ('aa' in ['ab', 'bb', 'cc']) == False
Out[5]: True
In [6]: ('aa' in ['aa', 'bb', 'cc']) == False
Out[6]: False
das '==' bindet stärker wie das 'in'. Aber cofi's Lösung ist sowieso besser (mit 'not in').
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 11:57
von BlackJack
Gut geraten, aber das hat nichts mit Operatorbindung zu tun, sondern das ``in`` und ``==`` beides Operatoren sind und ``a op b op c`` als ``a op b and b op c`` ausgewertet wird! Bei ``0 < x < 10`` ist das "offensichtlich" aber für ``in`` und ``==`` gilt das genauso. Da steht also ``Klasse in Klassen and Klassen == False``. Und der zweite Teil gilt halt weder für `True` noch für `False`.
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 14:49
von DaMutz
@BlackJack, vielen dank für die Erklärung. Falls meine Vermutung richtig gewesen wäre so dürfte dies hier keine Ausnahme werfen:
Code: Alles auswählen
In [7]: 'aa' in (['aa', 'bb', 'cc'] == False)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 15:09
von sma
Da es sich augenscheinlich um RPGs handelt (was ich als Thema gut finde), verzichte ich mal auf meinen Rant bzgl. des Unsinns, Boolsche Ausdrücke nochmal mit "== False" oder "== True" zu vergleichen, und komme gleich zu der Frage, die mich bewegt: Sind die Klassen da nicht eher Rassen? Aber welche Rasse wäre dann "Magier"? Oder falls es doch Charakter
klassen sind, wie unterscheiden sich "Magier" und "Mensch"? Und kann es keine Elfenmagier geben?
Ansonsten: Üblicherweise benutzt man in Python für (lokale) Variablen und Funktionsnamen kleine Anfangsbuchstaben. Und damit es deutlicher wird, dass "Klassen" ein Tupel ist, würde ich hier Klammern benutzen. Mein Vorschlag, den Code zu strukturieren, wäre dieser:
Code: Alles auswählen
def pick_race(prompt, races):
while True:
race = input(prompt)
if race in races:
return race
STANDARD_RACES = ("Elf", "Ork", "Mensch", "Zwerg")
race = pick_race("Wähle deine Rasse", STANDARD_RACES)
Stefan
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 15:23
von cofi
sma hat geschrieben:Sind die Klassen da nicht eher Rassen? Aber welche Rasse wäre dann "Magier"? Oder falls es doch Charakter
klassen sind, wie unterscheiden sich "Magier" und "Mensch"? Und kann es keine Elfenmagier geben?
Wenn man im Tolkien-Universum siedelt kann die Aufteilung so durchaus Sinn machen, mehr Unterscheidungen hatte das Buch ja nicht und die Magier waren tatsaechlich ihr eigenes Voelkchen.
Aber die grossen Spiele haben das auch anders gesehen - wahrscheinlich weil das so nicht sonderlich aufregend ist - ich persoenlich hab es auch lieber D&D-artig
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 18:34
von sma
cofi hat geschrieben:Wenn man im Tolkien-Universum siedelt kann die Aufteilung so durchaus Sinn machen, mehr Unterscheidungen hatte das Buch ja nicht und die Magier waren tatsaechlich ihr eigenes Voelkchen.
Na gut, da hast du Recht. Aber wären es dann nicht Elben statt Elfen?
Stefan
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 18:35
von DasIch
sma hat geschrieben:Na gut, da hast du Recht. Aber wären es dann nicht Elben statt Elfen?

Im Englischen wird von Elfen gesprochen mangels Alternative.
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 19:23
von /me
sma hat geschrieben:Da es sich augenscheinlich um RPGs handelt (was ich als Thema gut finde), verzichte ich mal auf meinen Rant bzgl. des Unsinns, Boolsche Ausdrücke nochmal mit "== False" oder "== True" zu vergleichen, und komme gleich zu der Frage, die mich bewegt: Sind die Klassen da nicht eher Rassen?
Ach, wenn du so Systeme wie DSA 1 nimmst dann passt das schon.
Gruß,
Matthias (gerade an den letzten Feinheiten seiner Serenity-RPG-Runde feilend)
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 21:26
von sma
DasIch hat geschrieben:Im Englischen wird von Elfen gesprochen mangels Alternative.
Da heißen die Feen, die man im Deutschen auch als Elfen bezeichnen würde, fairy, fay oder fae und es gibt keine Verwechslungsgefahr. AFAIK ist die offizielle Übersetzung bei Tolkin Elb (wahrscheinlich von Alb) und nicht Elf. Wie auch immer... Serenity? Nach den offiziellen RPG-Regeln? Oder als Konvertierung eines anderen Systems (ich könnte ja Savage Worlds empfehlen

?
Stefan
Re: Stehe ziemlich auf dem Schlauch...
Verfasst: Sonntag 5. September 2010, 22:57
von /me
sma hat geschrieben:Serenity? Nach den offiziellen RPG-Regeln?
Nach den Regeln wie im Serenity-Regelwerk von Margaret Weis Productions, abgerundet durch die Anpassungen in "Big Damn Heroes" und minimal aufgefrischt durch die Basisregeln zum Cortex-System.
Um jetzt verzweifelt wieder zu versuchen on-topic zu werden: Serenity hat gar keine Charakterklassen, so dass die Definition dort wie folgt aussehen müsste: