Zeitschaltung auf Rasberry

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Dann mir ein gutes Buch zu Thema Programmierung mit Python leisten. Und das erst mal durcharbeiten.
Brauchst du nicht. Einfach das offizielle Python-Tutorial auf docs.python.org durcharbeiten. Da ist alles drin, was du zum Lernen brauchst. Und es ist fehlerfrei - was dummerweise auf die meisten deutschsprachigen Einsteigerbücher nicht wirklich zu trifft.

Tipp: Stell' die GUI-Programmierung einen Schritt zurück. Wie schon gesagt wurde: für eine nicht-triviale GUI musst du die Objektorientierung von Python verstanden haben, sonst gibt das nix.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Einstein: Ich habe mal in das verlinkte Buch geschaut und das ist gruselig. War auch irgendwie zu erwarten, denn der Autor hat zu allen möglichen Programmiersprachen Bücher geschrieben. Der verspricht nicht nur für Python sondern auch für Java, C++, PHP, und Arduino den leichten Weg zum Experten. Das ist üblicherweise ein Warnzeichen. Der kann vielleicht programmieren, aber hat nicht wirklich viel Ahnung von Python und wie man damit idiomatisch programmiert.

Beim schnellen durchblättern: Es wird `eval()` benutzt um Benutzereingaben in Zahlen umzuwandeln.

Wie Objekte funktionieren ist anscheinend nicht verstanden worden. Es steht dort das bei ``for item in sequence: item = item * 2`` sich die Werte in `sequence` nicht ändern weil `item` nicht die Elemente aus der Liste sind, sondern Kopien davon und das man nur die Kopie verändert. WTF‽

Wenn man die Listenelemente verändern will, soll man laut Author das hier machen:

Code: Alles auswählen

liste = [3, 6, 123, 54, 927]
print (liste)
for inhalt in enumerate(liste):
    liste[inhalt[0]] = inhalt[1] * 2
print (liste)
Gefolgt von der Anmerkung das man daran sieht das ``for``-Schleifen nicht immer sinnvoll sind und eine ``while``-Schleife hier einfacher wäre. WTF‽ Das man in Python grundsätzlich eher neue Listen erstellt, statt vorhandene zu verändern, wäre hier wohl die sinnvollere Anmerkung.

`range()` gibt angeblich eine Liste zurück. Ob der das Buch auch schon für Python 2 am Start hatte? ;-)

Bei OOP gibt es dann ziemlich am Anfang schon den Unsinn das man zwei führende Unterstriche für Kapselung verwendet. Und gleich darauf kommen dann natürlich Getter und Setter, damit man da dann wieder dran kommt. Natürlich alles nicht in der für Python üblichen Namensschreibweise sondern in camelCase.

Als Beispiel für eine Klassenvariable gibt's dann den ”Instanzzähler” damit der Autohändler weiss wieviele Autos er hat. Argh! Und runtergezählt wird mit einer `__del__()`-Methode. Natürlich ohne irgendeinen Hinweis was für Probleme man sich durch die blosse Existenz dieser Methode einhandeln kann. Doppel-Argh! ``del`` löscht angeblich Objekte. Die Vererbungsbeispiele machen keinen Sinn, zeigen also nur die Syntax. Das Buch ist IMHO für die Tonne…

Das Kapitel über Dateien ist einfach nur umständlich und unpythonisch.

Im Tk-Kapitel wird reichlich Gebrauch von `place()` mit absoluten Positionsangaben gemacht. Und es wird von `Button` ein `MyButton` abgeleitet mit einer Methode die auch einfach eine Funktion hätte sein können. Mir ist absolut schleierhaft was dieses Beispiel vermitteln soll. Und natürlich wird fröhlich auf globale Variablen zugegriffen. Da das Tk-Kapitel nach dem OOP-Kapitel kommt, hätte man das dort eigentlich richtig machen können/sollen.

Im letzten Kapitel, einem Anwendungsbeispiel wird dann noch mal schön gezeigt wie man GUI-Programme *nicht* schreiben sollte. Mal abgesehen davon das es extrem unschön ist, sind da auch so nette Fehler wie mehr als ein `Tk`-Objekt enthalten.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Einstein
User
Beiträge: 9
Registriert: Mittwoch 12. Dezember 2018, 22:37

na dann werde ich mal ich mir mal das offizielle Tutorial zu Gemüte ziehen.

Ja der unterschied von einem Raspberry und einem "normalen" Rechner mit Linux sind meinen Meinung nach die GPIO`s da Kann man ohne größere Hardware direkt etwas Steuern und Auslesen ansonsten läuft bei mir ein modifiziertes Sybian Namens Raspian drauf.

Na dann wird meine Heizung wohl noch etwas länger auf den Raspberry warten müssen wie geplant.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich waere da eh ein bisschen vorsichtig. Der PI ist toll, und ich benutze den sowohl beruflich als auch privat. Allerdings ist es nicht trivial, ein PI-basiertes System auf die Beine zu stellen, dass auf Dauer robust und zuverlaessig ist. Dazu ist die volle Komplexitaet einfach ein bisschen sehr hoch. Und zB nach einem Stromausfall (oder nur wackler..) kommt das System ggf. nicht mehr hoch. Da wuerde ich nur Steuer- und Regelungsaufgaben mit machen, die im Notfall auch nicht funktionieren muessen. Das es morgens mal kaelter als geplant ist, weil die Verbindung aus Wecker und PI nicht funktioniert hat - geschenkt.

Aber wenn dir die Rohre einfrieren, weil der PI versagt hat, ist das deutlich unangenehmer.

Fuer solche Aufgaben ist ggf. ein ESP32 besser geeignet - mit WIFI und micropython sehr schoen zu arbeiten drauf.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Einstein: Die GPIOs ändern aber nichts daran wie man unter Linux programmiert. GPIOs kann man sich auch an jeden ”normalen” Rechner zum Beispiel per USB anschliessen. Da braucht man also nicht wirklich spezielle Literatur zum programmieren lernen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten