if...elif Problem

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.
n3xtplayer
User
Beiträge: 36
Registriert: Sonntag 2. Oktober 2011, 12:13

Sonntag 30. Oktober 2011, 11:56

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

Sonntag 30. Oktober 2011, 12:00

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Sonntag 30. Oktober 2011, 12:02

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).
n3xtplayer
User
Beiträge: 36
Registriert: Sonntag 2. Oktober 2011, 12:13

Sonntag 30. Oktober 2011, 12:04

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...
n3xtplayer
User
Beiträge: 36
Registriert: Sonntag 2. Oktober 2011, 12:13

Sonntag 30. Oktober 2011, 12:19

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

Sonntag 30. Oktober 2011, 12:29

So .. und das solltest du gelesen haben: http://if-schleife.de/
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Sonntag 30. Oktober 2011, 13:22

Er spricht aber von Schlaufen, nicht von Schleifen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Sonntag 30. Oktober 2011, 15:28

Im letzten Post schon, darum habe ich es mir bis dahin verkniffen.
n3xtplayer
User
Beiträge: 36
Registriert: Sonntag 2. Oktober 2011, 12:13

Sonntag 30. Oktober 2011, 19:03

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!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Sonntag 30. Oktober 2011, 22:12

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

Sonntag 30. Oktober 2011, 23:07

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
BlackJack

Sonntag 30. Oktober 2011, 23:34

@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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Montag 31. Oktober 2011, 07:56

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Montag 31. Oktober 2011, 16:15

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 ;)
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

Montag 31. Oktober 2011, 18:55

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?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Antworten