Stehe ziemlich auf dem Schlauch...

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
Luchs08
User
Beiträge: 4
Registriert: Sonntag 23. August 2009, 09:20

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

Du willst

Code: Alles auswählen

while klasse not in klassen:
nutzen.

Der Grund duerfte sein, dass die Operatoren anders binden als du denkst.

P.S. Wirf mal einen Blick auf PEP8.
Luchs08
User
Beiträge: 4
Registriert: Sonntag 23. August 2009, 09:20

Ok, vielen Dank, funktioniert natürlich. Nur verstehen tu ich's noch nicht ganz. Wo liegt denn da der Unterschied?
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

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').
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`.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

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

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

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

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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:

Code: Alles auswählen

klassen = []
Antworten