if-Funktion unbefriedigend

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Wer kann mir helfen?
    Wenn ich versuche, if-Fuktionen in Python 2 einzugeben ...
    ich gebe ein:
    a=10
    if ==10:
    print "gleich"

    dann antwortet python tatsächlich
    gleich.

    Stelle ich aber vorher eine andere Bedingung, die nicht stimmt, erkennt python die darauf folgende, richtige Bedingung nicht mehr, und alles, was er antwortet, ist
    >>>

    Meine Frage ist: Mache ich was falsch? Oder geht bei python/beim raspi etwas schief? Oder kann python immer nur 1 Bedingung bearbeiten?

    Mit bestem Dank im Voraus für Antworten!

    keine Ahnung

  • Klingt für mich nach einem einfach Syntaxfehler. Wie wärs wenn du anstatt dem funktionierenden Code, den nicht funktionierenden hier zeigst? Du kannst deinen Code übrigens kopieren und hier einfügen, du musst ihn nicht nochmal hier abtippen.

    Die Teile werden übrigens "If-Verzweigung" genannt und nicht Funktionen.


  • ich gebe ein:
    a=10
    if ==10:
    print "gleich"

    Bei einer Bedingung wird etwas verglichen, nur was wird bei dir verglichen? :s Da fehlt also etwas... Du musst schon angeben was geprüft werden soll, wenn ... gleich 10: dann

  • Ich möchte den Post von meigrafd noch ein wenig erweitern. ;)
    Da Python im Gegensatz zu anderen Sprachen bei if Bedingungen ohne Klammern auskommt, müssen die Anweisungen eingerückt werden.

    if Bedingung:
    Anweisung

    In deinem Beispiel gehört die print Anweisung nicht zu der if Bedingung und wird deshalb immer ausgeführt.


  • Klingt für mich nach einem einfach Syntaxfehler. Wie wärs wenn du anstatt dem funktionierenden Code, den nicht funktionierenden hier zeigst? Du kannst deinen Code übrigens kopieren und hier einfügen, du musst ihn nicht nochmal hier abtippen.

    Die Teile werden übrigens "If-Verzweigung" genannt und nicht Funktionen.

    Danke schön, ich werde zukünftig also von "if-Verzweigung" schreiben.
    Ich habe den Tipp wahrgenommen und den gesamten Code hier, wobei ich jetzt für a= 5 eingesetzt habe.
    Gibt es nur 1 if-Verzweigung, reagiert python wunschgemäß:

    Python 2.7.3 (default, Mar 18 2014, 05:13:23)
    [GCC 4.6.3] on linux2
    Type "copyright", "credits" or "license()" for more information.
    >>> a = 5
    >>> if a < 10:
    print "kleiner als 10"


    kleiner als 10


    Wenn ich aber mehrere if-Verzweigungen habe, reagiert python nur noch mit den 2 Pfeilen, also nicht wunschgemäß, siehe folgenden Code:


    >>> if a < 4:
    print "zu klein"
    if a == 5:
    print "gleich 5"


    >>>


    Daher meine Fragen: a) mache ich etwas falsch? b) Kann es sein, dass python IMMER nur 1 if-Verzweigung bearbeiten kann?

    keine Ahnung
    Automatisch zusammengefügt:


    Bitte nutzt die Code-Umgebung dafür! Da funktioniert dann auch Einrückung, wenn man sie denn hat, richtig.

    Hallo,
    ich würde ja gerne tun, was man mir rät - verstehe den Rat aber nicht:
    was bedeutet das: "Bitte nutzt die Code-Umgebung dafür! " ?

    keine Ahnung
    Automatisch zusammengefügt:

    Bei einer Bedingung wird etwas verglichen, nur was wird bei dir verglichen? :s Da fehlt also etwas... Du musst schon angeben was geprüft werden soll, wenn ... gleich 10: dann

    Hier habe ich für a = 5 eingegeben, und das passiert: Was könnte hier fehlen, dass die if-Verzweigung bei mehr als 1 Bedingung nicht mehr wunschgemäß reagiert?

    Hier, was ich eingegeben habe und die Reaktion:

    >>> a = 5
    >>> if a < 10:
    print "kleiner als 10"


    kleiner als 10
    >>> if a < 4:
    print "zu klein"
    if a == 5:
    print "gleich 5"


    >>>

    Was ist der Grund, dass bei 2 if-Bediungungen als Reaktion nur noch drei Pfeile kommen?
    Mit Dank für Tipps
    keine Ahnung

    Einmal editiert, zuletzt von Keine Ahnung (15. Oktober 2015 um 11:52)

  • Hallo Keine Ahnung,

    Hallo,
    ich würde ja gerne tun, was man mir rät - verstehe den Rat aber nicht:
    was bedeutet das: "Bitte nutzt die Code-Umgebung dafür! " ?

    keine Ahnung

    In der Symnbolleiste gibt es links neben php ein Symbol für eine aufgerollte Papierrolle mit der Aufschrift "<>". Klicke da mal drauf und kopiere in das Eingabefeld Deinen Code.

    Alternativ erreichst Du das auch, wenn Du
    [ c o d e ] [ / c o d e ]
    eingibst - aber ohne Leerzeichen dazwischen. Alles zwischen ][ erscheint als wunderschön formatierter Code.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.


  • Wenn ich aber mehrere if-Verzweigungen habe, reagiert python nur noch mit den 2 Pfeilen, also nicht wunschgemäß, siehe folgenden Code:
    >>> if a < 4:
    print "zu klein"
    if a == 5:
    print "gleich 5"

    In der Console von Python sieht man den Fehler sehr schlecht, aber wenn man genau hinschaut, dann sieht man, dass dein zweites IF sich innerhalb deines ersten IFs befindet. D.h. wenn deine erste nicht zutrifft, dann kommt er auch gar nicht erst dazu, deine zweite IF abzuarbeiten.

    Dein Code würde so aussehen in einem Skriptdokument:

    Code
    a = 5
    if a < 4:
      print "zu klein"
      if a == 5:
        print "gleich 5"

    Wie du sehen kannst, ist die zweite IF-Verzweigung innerhalb deiner ersten, aber wenn die erste IF-Verzweigung zutrifft, kann die zweite ja nicht mehr zutreffen.

    Dein Code müsste so aussehen:

    Code
    a = 5
    if a < 4:
      print "zu klein"
    if a == 5:
      print "gleich 5"

    Einrückung ist in Python sehr wichtig.

    Schau dir am besten einfach folgende Seite an: http://www.tutorialspoint.com/python/python_if_else.htm

  • Jetzt können wir noch feststellen, dass hier anstelle des zweiten if's ein elseif angebracht wäre (oder else if oder elsif) wie auch immer das in python geschrieben wird.

    Ps. noch schnell gegoogled: 'elif' heißt es hier.


  • Vielen Dank, Andreas, für Deinen Tipp.
    Leider aber ist er aus folgenden Gründen für mich noch nicht brauchbar:

    1.) Egal, ob ich "code" (in eckigen Klammern, die ich hier weglasse, weil sonst ein grüner Kasten in der Vorschau entsteht) zuerst schreibe und dann meine Eingaben oder "code"[code/] und dann meine Eingaben, ob ich meine Eingaben zwischen die Klammern kopiere oder nicht: Nix klappt, es ist zum Weinen, und das sind die Reaktionen, die ich geerntet habe:

    >>>

    Code
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        [code]
    NameError: name 'code' is not defined
    >>> [code]a = 5


    SyntaxError: invalid syntax
    >>>

    Code


    SyntaxError: invalid syntax
    >>>

    Wie du sehen kannst, ist die zweite IF-Verzweigung innerhalb deiner ersten, aber wenn die erste IF-Verzweigung zutrifft, kann die zweite ja nicht mehr zutreffen.

    Dein Code müsste so aussehen:

    Code
    a = 5
    if a < 4:
      print "zu klein"
    if a == 5:
      print "gleich 5"

    Einrückung ist in Python sehr wichtig.

    Schau dir am besten einfach folgende Seite an: http://www.tutorialspoint.com/python/python_if_else.htm
    [/quote]

    Danke für Deine Mühen, auch dass Du mir einen Code geschrieben hast. Den habe ich direkt in mein python kopiert, und das kam dabei raus:

    >>>

    Code
    a = 5
    if a < 4:
      print "zu klein"
    if a == 5:
      print "gleich 5"

    Traceback (most recent call last):
    File "<pyshell#13>", line 1, in <module>
    [code]
    NameError: name 'code' is not defined
    >>>

    Folgenden Ärger habe ich mit python:
    1.) Die Einrückungen stammen nicht von mir, sondern werden automatisch generiert. Jede folgende if-Verzweigung ist also automatisch eingerückt und lässt sich nicht unter die Stelle des ersten "if" setzen.

    2.) Stets entstehen diese drei merkwürdigen Pfeile, die ich in allen Anleitungen nicht finde.

    3.) Danke daher auch für Deinen Tipp mit dem Tutorial ... aber auch das hat mir nicht weiterhelfen können. Die merkwürdigen 3 Pfeile z.B. kamen dort überhaupt nicht vor ... Das Problem, wie man das automatische Einrücken verhindern kann, auch nicht ....

    Was mache ich falsch?
    Mit Grüßen
    keine Ahnung

    Einmal editiert, zuletzt von Keine Ahnung (15. Oktober 2015 um 20:51)

  • Es gibt {CODE] und {PHP] blöcke. Code hat kein Syntax Highlight, PHP schon. Das ist der einzige Unterschied.
    natürlich mit Eckigen Klammern: [ ]

    Das solltest du aber NICHT in der python Konsole eingeben sondern ist hier fürs Forum!!!


    //EDIT: Bitte auch nicht Beiträge vollständig Quoten - vorallem nicht dann wenn diese genau da drüber stehen, das machts nur unübersichtlicher weil die Seite dadurch unnötig verlänger wird...

  • Code
    Ach, das ist ein Tipp für*s Forum! Danke schön, jetzt verstehe ich DEN wenigstens! ... und ich habe sogar das Symbol gefunden, was mich schonmal freut - auch wenn der Code in DIESEM Schreiben wohl nicht wesentlich war. Aber immerhin: Danke, der erste Tipp ist angekommen ... mit meinen if-Verzweigungen bin ich dennoch nicht weiter ...
    Grüße
    keine Ahnung


    Es gibt {CODE] und {PHP] blöcke. Code hat kein Syntax Highlight, PHP schon. Das ist der einzige Unterschied.
    natürlich mit Eckigen Klammern: [ ]

    Das solltest du aber NICHT in der python Konsole eingeben sondern ist hier fürs Forum!!!

  • Hi Comunity...

    ich bin mir zwar nicht sicher, aber füttert ihr hier gerade einen Troll?

    Keine Ahnung: Sry, wenn ich falsch liege und ich bitte um Entschuldigung in diesem Fall...

    Als Neueinsteiger in Python ist der Weg über ein Tutorial (im Netz massenhaft zu finden) sicherlich der bessere Weg als hier die "fundmantals" zu ergründen...
    Bitte schau dir (mindestens) ein Tutorial (z.B. http://www.python-kurs.eu/kurs.php) an, lies, teste und wenn du dann Fragen hast, komm gerne wieder (nett gemeint!)

    Mfg, das Zen

  • Hallo Zentris,


    Hi Comunity...

    ich bin mir zwar nicht sicher, aber füttert ihr hier gerade einen Troll?

    ach was, Zentris, nur EINEN Troll? :s Ich habe in den letzten drei Tagen das Gefühl, dass hier gerade mehrere Trolle gemästet werden - und dass etliche Etablierte aufgerieben werden. Und typische Troll-Eigenschaften angenommen zu haben scheinen.

    Auch ich entschuldige mich prophylaktisch, falls der User "Keine Ahnung" kein Troll ist und wirklich alles ernst meint

    Vielleicht ist er aber auch bloß in einem Alter, in dem es uns Älteren einfach verdammt schwerfällt, zwischen Troll und Neugierig-Wissbegierig-Tolpatsch unterscheiden zu können. Wenn dem so ist, dann müssen wir uns weiterhin in Geduld üben, Verständnis zeigen, Langmut beweisen ...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • :lol:

    ich lese ja nur noch sporadisch... liege derzeit mit einer "MakerFair" Erkältung flach...
    Aber ich kann es bestätigen...

    Hm, sind vielleicht alles neue Jünger, vom MakerFair Virus befallene, vom RasPi infizierte Neueinsteiger?
    Wäre ja zu begrüßen...

    Langmut... (jaja)... Geduld (jaja)... ==> "Üben du mußt, junger Palavan" :thumbs1:

    Grüße, das Zen

  • Hallo dbv,


    Langmut ist Wort, welches ich erst googlen musste :lol:


    [OT]
    dieses Wort wählte ich doch mit einer gewissen Absicht... ich war mal Lehrer in einem Institut, dort spielte Geduld, Verständnis, Langmut - aber auch Demut (= ein anderes Wort für Google?) eine große Rolle.
    [/OT]

    Zentris: Gute Besserung!


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (15. Oktober 2015 um 22:29)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!