@Sabrina112: Nachsicht mit blutigen Anfängern ist so eine Sache. Wenn das schon damit anfängt das Code gezeigt wird der irgendwie zusammenkopiert wurde und deshalb nur begrenzt Sinn macht und so dermassen offensichtlich syntaktisch falsch ist, fragt man sich natürlich schon ab da Wille besteht selbst was zu machen, oder ob das wieder darauf hinaus läuft das irgendein Code hingeworfen, und gehofft wird wir würden hier schon lauffähigen Code liefern, der für Dich die Hausaufgabe löst.
Der Code kommt nicht einmal am Compiler vorbei. Und wenn man die zwei Zeilen löscht die da wie ein Fremdkörper drin stehen und dafür verantwortlich sind, dann macht das Programm nichts ausser eine Funktion zu definieren, die aber nicht ausgeführt wird. Warum zeigst Du diesen Code der nicht kompliliert und nicht mal etwas machen würde wenn der Compiler den fehlerhaften Teil einfach ignorieren würde?
Trotzdem Anmerkungen zum Quelltext: Eingerückt wird per Konvention vier Leerzeichen pro Ebene, nicht acht.
``as`` beim Import ist zum umbenennen da, aber `GPIO` wird gar nicht umbenannt.
`time` wird importiert aber nirgends verwendet.
Kommentare sollen dem Leser einen Mehrwert über den Code geben. Faustregel: Kommentare beschreiben nicht *was* der Code macht, denn das steht da bereits als Code, sondern warum er das macht. Sofern das nicht offensichtlich ist. Offensichtlich ist in aller Regel auch was in der Dokumentation von Python und den verwendeten Bibliotheken steht.
Wirklich schlecht sind inhaltlich falsche Kommentare, denn die sollen ja gerade Fragen die der Leser haben könnte beantworten und Klarheit schaffen. Wenn Code und Kommentar nicht zusammenpassen, erreicht man aber das Gegenteil. Der Leser weiss dann nicht wo der Fehler ist — im Code oder im Kommentar. Wenn da im Kommentar steht `destroy()` wird aufgerufen, im Code aber `Endprogram()` aufgerufen wird, was wäre dann korrekt? Wobei es hier beide Funktionen gar nicht gibt, also beides nicht richtig sein kann.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `ledPin` müsste `LED_PIN` heissen und `Endprogram()` müsste `end_program()` heissen.
Falls man `RPi.GPIO` verwendet ist es wichtig das am Ende `GPIO.cleanup()` aufgerufen wird. Das sollte man mit einem ``try``/``finally`` sicherstellen, damit das auch passiert wenn das Programm durch eine Ausnahme abgebrochen wird mit der man nicht gerechnet hat.
Das Grundgerüst würde dann so aussehen:
Code: Alles auswählen
#!/usr/bin/env python3
from RPi import GPIO
LED_PIN = 5
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.LOW)
def main():
try:
setup()
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
if __name__ == "__main__":
main()
Ich würde allerdings wenn es keinen guten Grund gibt, `gpiozero` statt `RPi.GPIO` verwenden. Das hat die modernere und einfachere API.
An Netzwerkzähler kann man mit dem `psutil`-Modul kommen.