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

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

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

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: 37
Registriert: Sonntag 2. Oktober 2011, 12:13

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: 37
Registriert: Sonntag 2. Oktober 2011, 12:13

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

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

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

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

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

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

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

@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

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

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

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

also war das was ich sagte im großen und ganzen die wahrheit aber ok :DD
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
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.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

@deets
nein war es nicht aber ich gebe gern zu, dass die antwort von EyDu detaillierter war
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
n3xtplayer
User
Beiträge: 37
Registriert: Sonntag 2. Oktober 2011, 12:13

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