Seite 1 von 1

if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 11:56
von n3xtplayer
Hey zusammen

Bei einer Reihe von if und elif Folgen habe ich ein Problem. Es geht um den Vergleich der Kartenwerte des Spielers und der Dealers in einem meiner Programme.

Code: Alles auswählen

            if Dend == 'BJD':       #Vergleich Dend und Pend, Ausewrtung
                L1 = L1 + 1
            elif playerdraw > Dend and playerdraw <= 21:
                W1 = W1 + 1
            elif playerdraw < Dend and Dend <= 21:
                L1 = L1 + 1
            elif playerdraw <= 21 and Dend > 21:
                W1 = W1 + 1
            elif playerdraw <= 21 and playerdraw == Dend:
                T1 =T1 + 1
            elif playerdraw > 21:
                L1 = L1 + 1
            if Dend == 'BJD':       #Vergleich Dend und Pend, Auswertung
                L2 = L2 + 1
            elif playerstand > Dend and playerstand <= 21:
                W2 = W2 + 1
            elif playerstand < Dend and Dend <= 21:
                L2 = L2 + 1
            elif playerstand <= 21 and Dend > 21:
                W2 = W2 + 1
            elif playerstand <= 21 and playerstand == Dend:
                T2 = T2 + 1
            elif playerstand > 21:
                L2 = L2 + 1
Nun ist das Problem: die erste Reihe von if...elif Anweisungen funktioniert einwandfrei. Als dann jedoch wieder ein ''if'' kommt, gibt es irgendein durcheinander. Die folgenden ''elif''s funktionieren als normale ''if''s. Hat der Dealer also Blackjack (''BJD''), so kommt der Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#160>", line 1, in <module>
    BJbasic_Ace(13)
  File "<pyshell#138>", line 26, in BJbasic_Ace
    elif playerdraw > Dend and playerdraw <= 21:
TypeError: unorderable types: int() > str()
Die elif-Schlaufen werden also durchlaufen, obwohl die if Schlaufe zuvor eingetreten ist. (Es findet folglich ein Vergleich zwischen dem Namen 'BJD' und einem Zahlenwert statt, und das geht ja nicht).
Wieso ist das so? Hat jemand eine Lösung dazu?

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 12:00
von cofi
Dein Problem hat ueberhaupt nichts mit `if` oder `elif` zu tun, sondern du willst eine Zahl mit einer Zeichenkette vergleichen, was nunmal keinen Sinn macht.

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 12:02
von Darii
Such doch nicht den Fehler zuerst in der unwahrscheinlichsten Möglichkeit, dass Python nicht das tut was es soll. Was ist den wirklich in den Variablen drin? Lass dir das doch mal vorher ausgeben. Am besten mit print repr(variable).

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 12:04
von n3xtplayer
Will ich das?
Ich habe gedacht, wenn ich ein ''elif'' schreibe, dann setzt das voraus, dass das ''if'' nicht eingetreten ist, und Dend somit keine Zeichenkette ist, sondern eine Zahl. Der Vergleich würde somit nur aus Zahlen bestehen...

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 12:19
von n3xtplayer
Ich habe den Fehler natürlich nicht in Python gesucht, sonder ich habe mich nur gefragt, ob ich etwas falsch verstanden habe.
Aber du hattest recht. Ein simpler Schreibfehler hat bewirkt, dass die Variable nicht durch die ''if''-schleife geht sondern in die ''elif''-schleifach getragen werden.
das mir dass nicht aufgefallen ist ^^ Isch schäme mich
Trotzdem danke für deine Hilfe :)

Gruss

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 12:29
von cofi
So .. und das solltest du gelesen haben: http://if-schleife.de/

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 13:22
von jbs
Er spricht aber von Schlaufen, nicht von Schleifen.

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 15:28
von cofi
Im letzten Post schon, darum habe ich es mir bis dahin verkniffen.

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 19:03
von n3xtplayer
haha danke vielmals. Ich war mir ja selbst nicht sicher ob ''schleife'' die richtige Bezeichnung ist. Deswegen habe ich mal ''if-schleife'' in google eingegeben... gleich erschienen zahlreiche vorschläge von ''if-schleife in java'' bis ''if-schleife in python''. Das hat mir dann meine Zweifel weggenommen... Fehler!

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 22:12
von derdon
Ich kann mir nur schwer vorstellen, dass du nach "if-schleife" gegoogelt hast. Der erste Treffer ist bei mir http://www.if-schleife.de/, der fünfte ist Was sind eigentlich if-Schleifen?, der sechste http://www.studis-online.de/Fragen-Bret ... 105,498315, außerdem noch http://www.php.de/beitragsarchiv/46875- ... leife.html. Alle auf der ersten Seite der Suchergebnisse. Ich frage mich, welche Quellen dir die Zweifel genommen haben.

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 23:07
von sma
Mir war gerade nach Klugscheißen, aber weil es OT ist, hier nur ein Link: https://gist.github.com/65fe71a2a8c98d5324b0 - es gibt nicht nur keine if-schleife, sondern auch keine while-schleife und keine if-anweisung - eigentlich.

Stefan

Re: if...elif Problem

Verfasst: Sonntag 30. Oktober 2011, 23:34
von BlackJack
@derdon: Kennst Du das Phänomen der „Suchblase“? http://dontbubble.us/

Wer weiss, vielleicht gibt es ja Such- und Klickhistorien bei denen Google denkt, das einem Suchergebnisse bei denen viel von ``if``-Schleifen die Rede ist, am besten gefallen.

Re: if...elif Problem

Verfasst: Montag 31. Oktober 2011, 07:56
von Darii
sma hat geschrieben:Mir war gerade nach Klugscheißen, aber weil es OT ist, hier nur ein Link: https://gist.github.com/65fe71a2a8c98d5324b0 - es gibt nicht nur keine if-schleife, sondern auch keine while-schleife und keine if-anweisung - eigentlich.
Das while ist aber ein Klassischer Fall von Duck-Typing. Es sieht aus wie eine Schleife und es verhält sich so, also ist es eine Schleife. ;) Wohingegen das IF nur schleift, wenn man ein jmp ans Ende pack und davor springt, aber dann darf man es auch ruhig Schleife nennen.

Re: if...elif Problem

Verfasst: Montag 31. Oktober 2011, 16:15
von derdon
BlackJack hat geschrieben:@derdon: Kennst Du das Phänomen der „Suchblase“? http://dontbubble.us/
Ich habe schon einmal davon gehört, es aber wieder aus meinem Gedächtnis verbannt ;)

Re: if...elif Problem

Verfasst: Montag 31. Oktober 2011, 18:55
von Neo_Junior
ich würde sagen, "elif" läuft einfach nach "if" weil python zweimal hintereinander "if" nicht annimmt also wirkt das"elif" ganz genau wie dein "if" nur halt danach ich glaube, was du meinst ist "else" oder?

Re: if...elif Problem

Verfasst: Montag 31. Oktober 2011, 19:36
von EyDu
Neo_Junior hat geschrieben:ich würde sagen, "elif" läuft einfach nach "if" weil python zweimal hintereinander "if" nicht annimmt also wirkt das"elif" ganz genau wie dein "if" nur halt danach ich glaube, was du meinst ist "else" oder?
Natürlich kann man zwei ifs nacheinander schreiben, aber sematisch ist es etwas anderes als ein `elif`. Letzteres entspricht:

Code: Alles auswählen

if x:
    ...
elif y:
    ...

#entspricht

if x:
    ...
else:
    if y:
        ...
Bei

Code: Alles auswählen

if x:
    ...
if y:
    ...
kann es passieren, dass sowohl der Block des ersten ifs, als auch das des zweiten, abgearbeitet werden. Bei elif ist sichergestellt, dass genau ein Block betreten wird.

Re: if...elif Problem

Verfasst: Montag 31. Oktober 2011, 19:42
von Neo_Junior
also war das was ich sagte im großen und ganzen die wahrheit aber ok :DD

Re: if...elif Problem

Verfasst: Dienstag 1. November 2011, 00:07
von deets
@Neo_Junior

Im grossen und ganzen war das einfach nur unverstaendliches Gebrabbel, was du gesagt hast. Da kann man jetzt natuerlich reinlesen, was man mag.

Re: if...elif Problem

Verfasst: Dienstag 1. November 2011, 15:06
von Neo_Junior
@deets
nein war es nicht aber ich gebe gern zu, dass die antwort von EyDu detaillierter war

Re: if...elif Problem

Verfasst: Dienstag 1. November 2011, 18:07
von n3xtplayer
Also, erstens ist mein Problem längst gelöst und es lag nicht daran das Python keine 2 if's hintereinander akzeptiert. Das tut es nämlich offensichtlich schon.
@derdon: Ich habe es nicht gegooglet, sondern lediglich im Suchfenster eingegeben. Dort ist der Name ''if-schleife'' recht schnell aufgetaucht (während ich noch am schreiben war), unter anderem auch verbunden mit ''python''. Das Suchen habe ich dann (was wohl ein fehler war :P) weggelassen).