for x in range Frage

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    warum geht diese for schleife nicht?

    Ich moechte dass wenn Taster 3 gedrueckt wir zuerst 4 x das Lauflicht läuft und erst nach 4x
    das os.system den Befehl shutdown macht.

    So wie es jetzt ist macht er auch shutdown in der Schleife 4x

    Gruss
    gwaag

  • Weil du ihm das genau so sagst...
    Leerzeilen sind Python egal, mit Einrückung sagst du, was zusammen gehört.
    os.system("sudo shutdown -h now")
    sleep(1)

    muss also einen Tab weit weiter nach links und es funktioniert.

  • Nochmal genauer erklärt: Im Gegensatz zu den meisten anderen Programmier- oder Interpretersprachen gibts in Python kein END IF, kein NEXT, kein WEND oder dergleichen. Stattdessen bestimmt die Einrückungstiefe, was zu einer Schleife gehört und was nicht. Anders gesagt: In Python sind Einrückungen nicht nur eine optionale Möglichkeit, die Lesbarkeit für Programmierer zu erleichtern, sondern direkt Teil der Syntax! Dementsprechend verpflichtend sind die Einrückungen, sobald Kontrollstrukturen ins Spiel kommen.

    Wenn du

    Code
    for x in range(4):
        print("Ich werde 4x ausgeführt")
        print("Ich auch")

    schreibst, ist das was anderes als

    Code
    for x in range(4):
        print("Ich werde 4x ausgeführt")
    print("...ich aber nur einmal, nachdem die Schleife durchgelaufen ist!")  # Warum? Weil die Einrückung wieder an derselben Stelle ist wie die FOR-Schleife

    Einmal editiert, zuletzt von Astorek86 (29. Juli 2014 um 14:05)

  • Eine while-schleife benötigt eine zusätzliche Variable und eine zusätzliche Operation pro Durchlauf, braucht mehr Zeilen und ist weniger deutlich, was es tut.
    Ich bin für die for-Variante.
    Und diese Variante ist so das Beispiel für for-schleifen in der Python-Doku... sooo schlimm kann es also nicht sein.

  • Wenn ihr schon so am rumverbessern seid, bin übrigens auch für die For-Schleife, würde ich das LED Blinken in eine Funktion packen.

    Code
    import pifacedigitalio as piface
    
    
    def blink_led(led_output):
        piface.digital_write(led_output,1)
        sleep(0.1)
        piface.digital_write(led_output,0)

    So kann jede einzelne PiFace LED über eine Funktion aufgerufen werden:

    Code
    blink_led(0) #lässt LED Nummer 1 (0) einmal blinken

Jetzt mitmachen!

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