23,99 €
Schlichtes Ausführen fertiger Software wird den Bedürfnissen des Ingenieuralltags nicht mehr gerecht. Oft muss Programmcode selbst entwickelt oder angepasst werden. Aber Ingenieure sind keine Softwareentwickler. Mit Python steht ein mächtiger und flexibler Werkzeugkasten zur Verfügung, der es erlaubt, eine große Klasse von Ingenieurproblemen - oft mit wenig Aufwand - zu lösen. Die Kernaufgaben sind dabei meist: Daten akquirieren, Lösungsalgorithmen anwenden, Ergebnisse visualisieren. Das Buch zeigt anhand zahlreicher Beispiele aus unterschiedlichen Anwendungsfeldern der Ingenieurwissenschaften, wie Python zur Lösung dieser Aufgaben eingesetzt werden kann. Gleichzeitig wird das nötige Hintergrundwissen vermittelt, um das Gelernte auf eigene Fragestellungen zu transferieren. Die vermittelten Kenntnisse sind anwendbar auf Übungsaufgaben im Studium genauso wie auf Probleme aus der Praxis.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 433
Veröffentlichungsjahr: 2021
Python für Ingenieure für Dummies
360
int
104.5
float
1+2j
complex
True, False
bool
None
NoneType
[1, 2, 3]
list
(1, 2, 3)
tuple
{'a': 1, 'b': 2}
dict
'abc', ”abc”
str
f”Var: {var}”
f-String
b”abc”
bytes
if cond:, elif cond:, else:
If-Bedingung
while cond:
While-Schleife
for element in list:
Iteriere über Elemente
for i in range(a, b):
Iteriere über Zahlen
for i, element in enumerate(list):
Iteriere über Index und Inhalt
list[0]
erstes Element
list[-1]
letztes Element
list[0:10]
Teilliste mit 10 Elementen
list[0:2:10]
Teilliste mit Schrittweite 2, 5 Elemente
list[::-1]
Liste umdrehen
a.append(e)
Element am Ende anfügen
del list[0]
erstes Element löschen
len(a)
Länge der Liste
e in a
Prüfen, ob Element in Liste enthalten
b = list(a)
Liste kopieren
a + b
Listen verknüpfen
[e for e in list if cond]
List-Comprehension
np.array([10, 20, 30, 40])
1D-Array aus einer Liste
np.array([[10, 20], [30, 40]])
2D-Array aus Liste von Listen
np.arange(start, stop, step)
Sequenz von Zahlen (Schrittweite vorgegeben)
np.linspace(start, stop, N)
Sequenz von N Zahlen (linear skaliert)
np.logspace(start, stop, N)
Sequenz von N Zahlen (logarithmisch skaliert)
np.zeros(shape)
Array voller Nullen mit Shape shape
np.ones(shape)
Array voller Einsen mit Shape shape
np.random.random(shape)
zufälliges Array mit Shape shape
np.diag(x)
quadratisches Array mit Diagonale x
x[0]
»erstes« (vorderstes) Element von x
x[-1]
letztes Element von x
x[:3]
Elemente von x mit den Indizes 0, 1, 2
x[3:]
Elemente von x ab dem Index 3
x[:-2]
alle Elemente von x außer den beiden letzten
x[-5:]
die fünf letzten Elemente von x
x[4:10:2]
Elemente von x mit den Indizes 4, 6, 8
x[:]
alle Elemente von x
x[::-1]
alle Elemente von x in umgekehrter Reihenfolge
y[0, :]
erste Zeile (Index 0) von y als 1D-Array
y[2:3, :]
dritte Zeile (Index 2) von y als 2D-Array
y[:, -4:]
vier letzte Spalten von y als 2D-Array
y[1:, [0, -1]]
erste und letzte Spalte von y, aber ohne erste Zeile
y[1:, [0, -1]]
erste und letzte Spalte von y, aber ohne erste Zeile
x[x>0.7]
alle Werte von x, die größer als 0.7 sind
np.concatenate((x1, x2))
zwei Arrays hintereinanderhängen
np.row_stack((x1, x2))
zwei Arrays zeilenweise stapeln
np.col_stack((x1, x2, x3))
drei Arrays spaltenweise stapeln
x.T
x transponieren
x.flatten()
x auf 1D-Array reduzieren
x.squeeze()
überflüssige Dimensionen (mit Länge 1) von x entfernen
x.reshape(3, 7)
x-Elemente in 3 Zeilen und 7 Spalten anordnen
x.reshape(3, -1)
x-Elemente in 3 Zeilen mit passender Spaltenzahl anordnen
3*x
Array mit elementweisem Produkt aus 3 und jeweiligem x-Element
4+x
Array mit elementweiser Summe aus 4 und jeweiligem x-Element
x1+x2
Array mit elementweiser Summe von x1 und x2
x1*x2
Array mit elementweisem Produkt von x1 und x2
x1@x2
Skalarprodukt zwischen zwei 1D-Arrays gleicher Länge
x@A
interpretiert als: Zeilenvektor (1D-Array) mal Matrix (2D-Array)
A@x
interpretiert als: Matrix (2D-Array) mal Spaltenvektor (1D-Array)
x**3
Array mit 3. Potenz jedes x-Elements
np.exp(x)
Array mit Exponentialfunktion, angewendet auf jedes x-Element
Passende Dimensionen werden vorausgesetzt, sonst: BroadcastingError.
np.fft.fft(xx)
diskrete Fourier-Transformation
np.fft.ifft(XX)
inverse DFT
np.fft.fftfreq(N, d=dt)
passende Stützfrequenzen
np.fft.fftshift(ff)
Nullfrequenz verschieben
scipy.signal.periodogram(xx, fs=fs)
Leistungsdichtespektrum berechnen
scipy.signal.welch(xx, fs=fs)
Welch-Methode
plt.figure()
neue Abbildung
plt.subplot(234)
Subplot unten links für 2 Zeilen und 3 Spalten
plt.plot(xx, yy)
Linienplot zeichnen
plt.tight_layout()
Elemente platzsparend ausrichten
plt.savefig(”my_plot.pdf”)
Diagramm abspeichern
plt.show()
Diagramm anzeigen
plt.xlim(-1, 1)
Definitionsbereich einstellen
plt.title(”Überschrift”)
Diagrammüberschrift
plt.xlabel(”$t$ [s]”)
Achsenbeschriftung
plt.text(1, 3, ”$x_0$”)
Text hinzufügen
plt.grid(True)
Gitter aktivieren
plt.legend()
Legende basierend auf label-Parametern
figsize=(4, 3)
Diagrammgröße 4 × 3 Zoll (1 Zoll = 22.4 mm)
color=”red”
Linienfarbe
linestyle=”––”
gestrichelte Linie
linewidth=3
Linienbreite 3 pt
marker=”x”
Marker für Stützpunkte
markersize=4
Markergröße
label=”$x_1$”
Linienbeschriftung für Legende
Python für Ingenieure für Dummies
Bibliografische Informationder Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
© 2022 Wiley-VCH GmbH Weinheim
Wiley, the Wiley logo, Für Dummies, the Dummies Man logo, and related trademarks and trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries. Used by permission.
Wiley, die Bezeichnung »Für Dummies«, das Dummies-Mann-Logo und darauf bezogene Gestaltungen sind Marken oder eingetragene Marken von John Wiley & Sons, Inc., USA, Deutschland und in anderen Ländern.
Das vorliegende Werk wurde sorgfältig erarbeitet. Dennoch übernehmen Autoren und Verlag für die Richtigkeit von Angaben, Hinweisen und Ratschlägen sowie eventuelle Druckfehler keine Haftung.
Print ISBN: 978-3-527-71767-5ePub ISBN: 978-3-527-82846-3
Coverillustration: Carsten Knoll – https://python-fuer-ingenieure.deKorrektur: Matthias Delbrück, Dossenheim/Bergstraße
Carsten Knoll studierte an der TU Dresden Mechatronik und ist dort inzwischen als Postdoktorand am Institut für Regelungs- und Steuerungstheorie tätig. Seine ersten Erfahrungen mit Python machte er bereits im ersten Semester in einem inspirierenden Workshop und vertiefte sie beständig durch den Einsatz in diversen Lehrveranstaltungen sowie Tätigkeiten in verschiedenen Instituten und Laboren. Um seine Begeisterung zu teilen und dieses Wissen weiterzugeben, initiierte er 2010 zusammen mit anderen Doktoranden eine fächerübergreifende Lehrveranstaltung und entwickelte sie seitdem inhaltlich und methodisch zum aktuellen »Pythonkurs für Ingenieur:innen« weiter.
Neben Regelungstechnik und Python-Programmierung befasst er sich unter anderem mit Aspekten des Maschinellen Lernens und der digitalen Wissensrepräsentation – sowie mit der Frage, wie diese Ansätze zur Lösung der großen Herausforderungen des 21. Jahrhunderts beitragen können.
Robert Heedt ist ebenfalls Absolvent der TU Dresden und Ingenieur der Elektrotechnik. Sein Arbeitsgebiet ist die Regelungstechnik, aus dem die Rechentechnik schon lange nicht mehr wegzudenken ist. Nach jahrelanger Odyssee durch die Welt der Programmiersprachen ist er jetzt im Python-Hafen gelandet.
Für Maria und meine Eltern. Ohne Euch hätte ich das nicht geschafft.
Für meine Eltern. Danke für Eure bedingungslose Unterstützung.
Die Autoren bedanken sich aufs Herzlichste bei Frau Andrea Baulig vom Verlag Wiley-VCH für den Anstoß zu diesem Projekt, die sehr konstruktive Kombination aus Motivation und Ermahnung sowie die Übernahme organisatorischer Details. Herrn Prof. Smits danken wir ebenfalls sehr herzlich für die sehr professionelle fachliche Korrektur des Manuskripts und die wertvollen Hinweise (alle verbliebenen Schwächen des Buches gehen natürlich auf unsere Kappe).
Wir danken auch unseren Kolleginnen und Kollegen sowie den Studierenden am Institut für Regelungs- und Steuerungstheorie, die sowohl mit Tipps als auch mit Fragen und Diskussionen eine beständige Inspirationsquelle für dieses Buch waren.
Nicht zuletzt gilt unser Dank den vielen Menschen, die durch Fähigkeiten, Fleiß und Enthusiasmus die Python-Welt zu dem gemacht haben, was sie ist.
Cover
Titelblatt
Impressum
Über die Autoren
Einleitung
Über dieses Buch
Törichte Annahmen über den Leser (m/w/d)
Ein Wort zur Sprache
Was Sie nicht lesen müssen
Wie dieses Buch aufgebaut ist
Symbole, die in diesem Buch verwendet werden
Wie es weiter geht
Teil I: Los geht's
Kapitel 1: Erstkontakt
Was ist Python und wozu ist es gut?
Jupyter-Notebook im Web
Besser als Ihr »Casio«
Erstes Date mit NumPy-Arrays
Bunte Bilder mit Matplotlib
Zusammenfassung
Kapitel 2: Installation und Inbetriebnahme
Python installieren
Alternativen zum Texteditor
Zusammenfassung
Kapitel 3: Grundlagen
Elementare Datentypen und Operationen
Listen, Strings und andere Sequenzen
Verzweigungen und Schleifen
List Comprehensions – Listen kompakt bauen und filtern
Funktionen
Pakete, Module und Namensräume
Fehlermeldungen verstehen und lieben lernen
Zusammenfassung
Teil II: Rechnen und Plotten
Kapitel 4: Effiziente Numerik mit NumPy
Arrays – Felder und ihre Bewirtschaftung
Array-Typen, elementweise Vergleiche und Indizierung von Arrays mit Arrays
Felder mit dem Mähdrescher abernten: Effiziente NumPy-Funktionen
Arrays, Matrizen – Wo ist denn da der Unterschied?
Zusammenfassung
Kapitel 5: Ein bisschen Mathe – So viel Spaß muss sein
Komplexe Zahlen – Nur manchmal reell, aber immer fantastisch
Lineare Gleichungssysteme – Von trivial bis unlösbar
Eigenwerte und Singulärwerte – Matrizen auf das Wesentliche reduziert
Zusammenfassung
Kapitel 6: Brunftzeit für Termhirsche
Aller Anfang ist sympel
Gleichungen lösen
Agent Smith in meiner Formel? Matrix und Vektor
Differenzial- und Integralrechnung
Symbolische Ergebnisse weiterverwenden
Was sonst noch geht
Zusammenfassung
Kapitel 7: Visualisierung
Diagramme zeichnen für Anfänger: Grundlagen
Gestochen scharf bis zum Schluss: Sauberer Export
Eine Schicht tiefer: Objektorientierung
Im Bilderzoo: Mehr Diagrammtypen
Zeit für Bewegung: Animationen
Zusammenfassung
Teil III: Fortgeschrittene Ingenieursmethoden
Kapitel 8: So tun, als ob: Modellbildung und Simulation
Beschreibung dynamischer Systeme: Ich krieg' Zustände
Dynamische Systeme lösen
Was beim Simulieren schiefgehen kann
Ruhelagen, (In-)Stabilität, exponentielles Wachstum und Eigenwerte
Wunschverhalten erzeugen: Etwas Regelungstechnik mit Tempomat
Zusammenfassung
Kapitel 9: Optimierung – Besser geht's nicht
Numerische Optimierung: Wie es grundlegend funktioniert
Nicht-lineare Gleichungen lösen durch Minimierung des Fehlers
Lokale Minima und n Dimensionen
Optimale Steuerung
Optimierung mit Begrenzungen …
… und Nebenbedingungen
Fit for Fun: Funktionsapproximation
Zusammenfassung
Kapitel 10: Mechanik – Ganz ohne schmutzige Hände
Statik und Festigkeitslehre – Bis sich die Balken biegen
Kinematik – Zwangsläufig gut
Kinetik: Volle Kraft voraus
Zusammenfassung
Kapitel 11: Fourier-Analyse – Python in der Disco
Die Fourier-Transformation der kontinuierlichen Welt
Diskrete Fourier-Transformation auf dem Papier
Die DFT in Python
Fourier-Analyse
Zusammenfassung
Kapitel 12: Kombinatorik, Zufall und Statistik
Kombinatorik – So viele Möglichkeiten
Pseudozufall – Abzählreime 2.0
Histogramme und Verteilungen
Der Mittelwert und seine Freunde
Statistische Unsicherheit visuell darstellen
Zusammenfassung
Kapitel 13: Python im Labor – Steuern, Messen, Filtern, Darstellen
Einordnung: In welchen Situationen ist Python sinnvoll?
Schnittstellen und Busse
Netzwerksockets
Schnittstellen über kompilierte Treiber ansprechen
Allgemeine Hinweise zur Laborautomatisierung
Rauschen und wie man damit umgeht
Zusammenfassung
Teil IV: Schöner, schneller, robuster
Kapitel 14: Echt Klasse: Fortgeschrittene Programmierung
Objektorientierung für Normalsterbliche
Funktionen, die Funktionen bauen
Exceptions für sich gewinnen
Zusammenfassung
Kapitel 15: Profiling und Performanz-Optimierung
Wärmeleitung mit Python simulieren
Wie schlimm ist es wirklich? Performanz messen
NumPy seine Arbeit machen lassen
Fremdsprachen willkommen – Das »Foreign Function Interface«
Gerade noch rechtzeitig – Just-in-Time-Kompilierung
Funktionen im Profil betrachtet
Zusammenfassung
Kapitel 16: Von den Profis lernen – Das Wichtigste zur Softwaretechnik
Seismografen im Kartenhaus: Assertions und Unittests
Ghostbusters: Interaktives Fehlersuchen
Quellcode mit Stil: PEP8
Ordnung und Sicherheit: Versionskontrolle mit Git
Zusammenfassung
Teil V: Der Top-Ten-Teil
Kapitel 17: Die 10 nützlichsten Module, die bisher nicht erwähnt wurden
Kommandozeilenargumente auswerten
Attraktive Benutzeroberflächen
Objekte inspizieren
Mit Daten und Uhrzeiten rechnen
Parallelisierung in mehreren Prozessen
Python-Objekte als Dateien abspeichern
Reguläre Ausdrücke
Typenannotationen
Datenauswertung mit pandas
Maschinelles Lernen mit scikit-learn
Kapitel 18: 10 fiese Fallstricke und 3 Mal schwarze Python-Magie
Code an der falschen Stelle bearbeitet oder installiert
Syntaxfehler durch falsche Einrückung
Python 2.x: Semikompatibler Gespenster-Code
Verwirrung mit globalen und lokalen Variablen
Wiederholter import bleibt wirkungslos
lambdify und Arrays
Konversion von SymPy-Matrizen zu NumPy-Arrays
Der Rückgabetyp von sympy.solve
Versehentliches Broadcasting
Backslashes in Strings
Tricksereien mit Indizes
Fallunterscheidungen in Zuweisung und als Index
Für Furchtlose: »Spezielle« Module
Kapitel 19: 10 nützliche Links
docs.python.org und pypi.org
pythontips.com
github.com/search
pythex.org
computers-are-fast.github.io
stackoverflow.com
sphinx-doc.org
hackerrank.com/domains/python
cscircles.cemc.uwaterloo.ca
planet.scipy.org
Stichwortverzeichnis
End User License Agreement
Kapitel 12
Tabelle 12.1: Übersicht über kombinatorische Funktionen.
Cover
Titelblatt
Impressum
Über die Autoren
Inhaltsverzeichnis
Einleitung
Fangen Sie an zu lesen
Stichwortverzeichnis
WILEY END USER LICENSE AGREEMENT
1
2
3
4
5
6
9
10
11
23
24
25
26
27
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
409
410
411
412
413
414
»Dem Ingenieur ist nichts zu schwör!« – Diese Herangehensweise hat über viele Jahre mehr oder weniger das Bild von Ingenieurinnen und Ingenieuren geprägt. Seit der Entstehungszeit dieses Credos in der Ära der Reißbretter und Tabellenbücher haben sich die Ingenieurwissenschaften aber erheblich weiterentwickelt. Digitale Werkzeuge bestimmen mehr denn je den Ingenieuralltag. Sie ermöglichen es, in kurzer Zeit Probleme zu lösen, die noch vor einer Generation unlösbar schienen. Mit diesen gestiegenen (und permanent weiter steigenden) Möglichkeiten wachsen aber auch die Erwartungshaltung und die Anforderung an Ingenieur:innen.
Der souveräne Umgang mit digitalen Werkzeugen ist kein Selbstläufer, sondern muss mit Mühe und Aufwand erlernt werden. Um so ärgerlicher ist es, wenn die hart erarbeiteten Fähigkeiten aus der Mode kommen oder sich aufgrund von Lizenzbeschränkungen (zum Beispiel beim Wechsel aus der Hochschule in ein Startup) nicht anwenden lassen. Die Programmiersprache Python und das darauf basierende Ökosystem aus Zusatzpaketen bieten vor diesem Hintergrund eine exzellente Wahl. Einerseits steigt die Popularität von Python seit den 1990ern moderat, aber beständig – das genaue Gegenteil von sonst häufigen Hype-Zyklen. Zum anderen sind alle relevanten Komponenten freie Software und plattformunabhängig – mehr Freiheit geht nicht.
Leider ist die Ingenieur-Ausbildung teilweise erstaunlich rückständig konservativ, weswegen das Lösen von Ingenieur-Problemen mithilfe digitaler Werkzeuge bisher kaum als Lehrveranstaltung angeboten wird – oder wenn, dann oft als kommerziell motivierte externe »Produktschulung« mit den oben angedeuteten Lizenz- und Abhängigkeitsproblemen. Das vorliegende Buch soll dem Abhilfe schaffen.
Dieses Buch soll Sie befähigen, vielfältige Aufgabenstellungen mit Python zu lösen. Es vermittelt dabei sowohl das grundsätzliche Herangehen als auch ganz konkrete Tipps und Tricks. Um dieses Wissen möglichst interessant, nachvollziehbar und anwendungsfreundlich darzustellen, werden Sie in diesem Buch auf eine Vielzahl von Beispielen treffen. Manche nur für einen dreizeiligen Codeschnipsel, andere für ein komplexeres Szenario, das sich einer praxisrelevanten Fragestellung widmet. Dabei finden Sie einen thematischen Streifzug durch viele Ingenieurdisziplinen: Von der Biegelinie eines Balkens über optimale Mischverhältnisse in der Verfahrenstechnik und die jω-Wechselstromrechnung bis zur Fourier-Analyse und Simulation eines Regelkreises im Zustandsraum ist (fast) alles dabei, was das Herz begehrt.
Zum Ingenieuralltag gehört auch der Umgang mit Zielkonflikten: Ein Fahrradrahmen kann zum Beispiel entweder extrem leicht oder extrem stabil sein. Am sinnvollsten ist aber ein auf typische Anwendungsfälle zugeschnittener Kompromiss. So ähnlich ist es auch bei diesem Buch: Die behandelten Code-Beispiele könnten entweder sehr einfach gestrickt sein, wären aber dafür weit weg von jedem Anwendungsbezug. Das andere Extrem wäre, an jedes Beispiel einen harten Realismusanspruch zu stellen und dabei die Verständlichkeit außer Acht zu lassen.
Ziel des Buches ist es, für eine möglichst große Zielgruppe möglichst oft den optimalen Bereich zwischen langweiliger Trivialität und demotivierender Komplexität zu treffen.
Diese Buch richtet sich an Menschen, die sich für Technik interessieren, wie sie funktioniert und wie man sie verbessern kann. Wir vermuten, dass sich dieses Interesse in einer gewissen Vorbildung niedergeschlagen hat und wollen unsere Zielgruppe weder langweilen noch überfordern. Idealerweise haben Sie
vier Semester oder mehr eines Ingenieurstudiengangs auf dem Buckel,
keine Angst vor gelegentlichen Gleichungen,
schon ein bisschen Programmiererfahrung (Variablen, Typen, Verzweigungen, Schleifen, ...),
einen Computer, dem üblicherweise Sie Anweisungen geben (und nicht umgekehrt),
»Mut zur Lücke« – also die Bereitschaft, auch mal etwas grob zu überfliegen, was für Sie aktuell gerade nicht so relevant ist, und
Sinn für Humor sowie die Bereitschaft, Fehler zu machen, Fehler zu suchen und daraus zu lernen.
Die Entstehung des Buches fällt in eine Zeit, in der mitunter sehr aufgeregt emotional über das Für und Wider verschiedener Formulierungen gestritten wird. Einige potenzielle Leser:innen werden das Buch vielleicht hochmütig ignoriert haben, weil der grammatikalisch maskuline Titel »für Ingenieure« ihrem Anspruch an geschlechtsneutrale Sprache zuwiderläuft. Andere werden beim ersten Auftreten von Syntaxinnovationen wie »Ingenieur:innen« einen mittleren Empörungsanfall bekommen und eine rituelle Verbrennung des Buches in Erwägung ziehen. Wir vertrauen jedoch darauf, dass die große Mehrzahl der Leserinnen und Leser ihren gesunden Menschenverstand einsetzt und weder der einen noch der anderen Überreaktion zum Opfer fällt. Selbstverständlich sind mit dem Titel und anderen maskulinen oder femininen Formulierungen grundsätzlich alle angesprochen, unabhängig davon, welchem Geschlecht sie sich zuordnen. Es sollte aber nicht überraschen, dass uns als Autoren eines Buches voller formaler Logik und wichtiger (programmier-)sprachlicher Detailnuancen das Konzept des »generischen Maskulinums«, wonach »der Ingenieur« ein neutraler Oberbegriff von »der Ingenieur« und »die Ingenieurin« sein soll, nicht so 100 % überzeugt. Andererseits haben wir auch (noch) keine ultimative Lösung und behelfen uns daher mit einem Mix aus klassischem und innovativem Sprachgebrauch. Ein ähnlicher Pragmatismus gilt in diesem Buch übrigens auch für den Umgang mit Anglizismen.
Nicht alles in diesem Buch ist für alle Leser:innen gleich wichtig. Grundsätzlich gilt, dass der Inhalt weiter vorn von eher allgemeinem Interesse ist und nach hinten immer spezieller wird. Andererseits kann es natürlich sein, dass Sie schon ein paar Erfahrungen mit Python haben und die ersten Kapitel deshalb nicht benötigen. Grundsätzlich gilt: Lesen Sie nur das, was Sie interessiert! Wenn Sie in einem der hinteren Kapitel ein Sprachkonstrukt oder einen Funktionsaufruf nicht verstehen, lohnt sich aber ein Blick in die vorderen (und ins Stichwortverzeichnis). Die Chance ist groß, dort Aufklärung zu finden. Wenn Sie inhaltlich mal bei einem Beispiel aussteigen: Machen Sie sich nichts draus. Die Ingenieurwissenschaften sind ein weites Feld und niemand kann alles.
Eine erfolgreiche Herangehensweise aus der Informatik ist es, in Schnittstellen zu denken. Sie müssen nicht wissen, wie ein Magnetron funktioniert (oder was das ist), um einen Mikrowellenherd zu benutzen. Es reicht, die Schnittstellen zu verstehen (Timer, Türknopf, »Pling«). Genauso ist es mit Code. Sie müssen nicht immer im Detail verstehen, wie eine Funktion oder ein Code-Abschnitt genau arbeitet. Oft reicht es zu verstehen, was die Eingangsdaten sind und was das Ergebnis ist oder bewirkt. Konzentrieren Sie Ihre Aufmerksamkeit auf die Bereiche, die aktuell relevant für Sie sind.
Das Buch ist in folgende Teile untergliedert:
Hier setzen wir den Zug aufs Gleis und rollen behutsam los. Den Anfang macht das (möglicherweise) allererste Ausführen eines Python-Programms – schön bequem online im Browser. Es folgen Installation und Inbetriebnahme sowie ein kompakter Überblick über die wichtigsten Sprachelemente von Python.
Der zweite Teil beinhaltet gewissermaßen das Grundstudium des Buches und das heißt, es kommt einiges an Mathematik vor. Aber natürlich müssen Sie nicht seitenweise mit Zahlenkolonnen oder Buchstabensalaten rumrechnen. Diese Arbeit soll Ihnen Python ja abnehmen und hier lernen Sie, wie das funktioniert. Außerdem geht es um Visualisierung, also wie sie aus Zahlen und Formeln schöne Kurven und Bilder machen.
Jetzt geht es ans Eingemachte: Optimierung, Kurven fitten, Simulation, Regelung, Fourier-Analyse und diverse statistische Untersuchungen. Dazu noch ein eigenes Kapitel über Mechanik, vom verbogenen Balken bis zum schwingenden Doppelpendel. Diese Methoden kommen in vielen Ingenieursanwendungen vor und bilden mit hoher Wahrscheinlichkeit den produktiven Kern Ihrer zukünftigen Python-Fähigkeiten.
Zwischen einem »Es funktioniert ... irgendwie«-Prototyp und einem anwendungsbereiten Endprodukt liegt oft noch ein gutes Stück Arbeit. In diesem Teil lernen Sie, wie Sie ihren Code schneller machen, aber auch wie Sie mithilfe von Modularisierung, automatischen Tests und Objektorientierung unübersichtlichen Spaghetti-Code verhindern und auch mit größerer Komplexität klarkommen.
Dieser Teil beinhaltet übersichtliche Auflistungen von nützlichen Paketen, typischen Fehlern und coolen Tricks. Außerdem sind hier die wichtigsten Links zu guten Referenzen und Dokumentationen zusammengefasst.
Um den Text in überschaubare Häppchen zu gliedern und die Art des Inhalts gleich optisch deutlich zu machen, gibt es die folgenden Symbol-Abschnitte:
Mit der »Glühbirne« werden konkrete Tipps mit potenziell hoher Praxisrelevanz hervorgehoben.
Der Techniker kennzeichnet Abschnitte mit Hintergrundinfos und Detailwissen. Hier kann es schon ein bisschen spezieller werden. Gut für all jene, die es möglichst genau wissen wollen.
Das Vorsicht-Symbol soll Ihre Aufmerksamkeit auf mögliche Probleme oder Tücken lenken. Der alte Spruch »Gefahr erkannt ⇒ Gefahr gebannt« gilt schließlich auch beim Programmieren.
Das Fernglas signalisiert die Anwesenheit eines Beispiels.
Das Wegweisersymbol hebt interessante externe Quellen hervor, vom Mathebuch bis zur SciPy-Referenz.
Um es gleich mal klar zu machen: Programmieren lernt man durch Programmieren. Dieses Buch von vorn bis hinten im Gartenstuhl sitzend oder auf dem Sofa liegend durchzulesen, ist also nicht die beste Idee. Je mehr Sie dagegen am Computer selber ausprobieren, umso mehr Lernerfolg und Nutzen werden Sie durch dieses Buch haben. Dafür haben wir eine Vielzahl an ausführlich kommentierten Codeschnipseln in den Text eingebaut. Zum Ausprobieren müssen Sie diesen Code natürlich nicht abtippen. Er steht unter https://www.wiley-vch.de/ISBN9783527717675 sowie unter https://python-fuer-ingenieure.de zum Herunterladen oder direkten Online-Ausprobieren zur Verfügung. Neben der gesparten Tipparbeit gibt es zwei weitere Vorteile des Online-Begleitmaterials: Die aus dem Code resultierenden Abbildungen sind dort direkt nach dem jeweiligen Schnipsel in voller Farbenpracht eingebettet und alle Links aus dem Buch sind direkt anklickbar aufgelistet.
Das bedeutet aber nicht, dass wir Ihnen grundsätzlich vom Selbertippen abraten, im Gegenteil. Der Lerneffekt durch reines Kopieren und Ausführen unserer Beispiele und das bloße Abnicken der Ergebnisse ist sehr überschaubar. Stattdessen sollten Sie Ihrem Spieltrieb freien Lauf lassen und den Code nach eigenen Vorstellungen abändern, zerlegen und neu zusammenbauen. Haben Sie dabei keine Angst vor Fehlermeldungen! Die gehören zum Programmieren dazu und sind dazu da, um Ihnen bei der Problemlösung zu helfen.
Wenn Sie ein Buch »ordentlich durcharbeiten«, geht das an diesem natürlich nicht spurlos vorbei. Im Gegenteil: Unterstreichungen, Randnotizen und Eselsohren sind explizit erwünscht und helfen erwiesenermaßen beim Verstehen und Behalten.
Teil I
IN DIESEM TEIL …
geht es zwar zunächst erst mal um das Appetitholen, aber dann kommt gleich auch schon das Schwarzbrot: Installieren und Konfigurieren der verschiedenen Komponenten einer produktiven Ingenieur-Python-Umgebung. Dazu zählt natürlich der Python-Interpreter selber, ferner die wichtigsten Zusatzbibliotheken, ein passender Editor und die Jupyter-Note-book-Oberfläche. Wenn diese Komponenten auf dem PC verfügbar sind, kriegen Sie in einem Crashkurs-Kapitel die wichtigsten Sprachelemente von Python serviert – ziemlich komprimiert, aber trotzdem leicht verdaulich.
Kapitel 2
IN DIESEM KAPITEL
Python-Interpreter installierenPakete aus dem Python-Package-Index nachrüstenInteraktives Programmieren in Jupyter-NotebooksWie die Profis: Integrierte Entwicklungsumgebungen (IDEs)Bevor Sie in die Python-Welt abtauchen können, muss Ihr Computer zuerst Python verstehen. Wenn Sie Windows benutzen, ist sehr wahrscheinlich noch gar nichts da, unter Linux und macOS ist möglicherweise schon eine Python-Version beim Betriebssystem dabei.
Versuchen Sie, in einer Kommandozeile die Befehle python --version oder python3 --version auszuführen. Wenn Sie eine Antwort wie Python 3.8.5 erhalten: Klasse! Es ist schon alles da, was Sie brauchen. In diesem Buch gehen wir davon aus, dass Sie mindestens Version 3.8 installiert haben. Sollte keine Antwort oder eine Fehlermeldung kommen, dann ist Ihr System noch unberührt.
Besonders unter Linux verbirgt sich hinter dem Befehl python gelegentlich noch eine veraltete Python-2-Installation. Verwenden Sie in diesem Fall in allen folgenden Beispielen den Befehl python3, um garantiert mit einer aktuellen Version zu arbeiten.
Zentraler Anlaufpunkt zur Installation ist die Webseite https://www.python.org/downloads/. Unter Linux und macOS können Sie Python alternativ auch jeweils über Ihren Paketmanager oder Homebrew installieren. Wie das geht, wissen Sie bestimmt selber am besten.
Standardmäßig enthält die Installation nur den Interpreter und die Standardbibliothek. Eine Alternative heißt Anaconda, sie bietet zusätzlich eine große Fülle nützlicher Bibliotheken, die gleich am Anfang mit installiert werden. »Wissenschaftliches Python mit Batterien inklusive« sozusagen. Diesen Download finden Sie unter https://www.anaconda.com/products/individual.
Der folgende Abschnitt ist einer Windows-spezifischen Stolperfalle gewidmet. Nutzen Sie ein anderes Betriebssystem, können Sie diesen getrost überspringen.
Nachfolgend werden wir gelegentlich den Python-Interpreter von der Kommandozeile starten. Wenn Sie einen Befehl wie python --version eingeben, muss ihr Rechner zuerst auflösen, wo überhaupt eine ausführbare Datei mit dem Namen »python« liegt. Gerade wenn Sie mehrere Versionen gleichzeitig installiert haben, scheiden sich die Gemüter, wie man den Überblick behält. Da Sie von diesem Problem vermutlich noch weit weg sind, wählen wir hier die einfachste Lösung. In der Umgebungsvariablen mit dem Namen »PATH« sind Verzeichnisse gespeichert, die Ihr Rechner durchsucht, wenn Sie ihm einen Befehl füttern.
Haben Sie bei der Installation den entsprechenden Haken belassen, wurde das Python-Verzeichnis bereits hinzugefügt. Funktioniert python --version nach der Installation aber immer noch nicht, müssen Sie manuell nachbessern. Unter Windows suchen Sie dafür in der Systemsteuerung nach »Umgebungsvariablen für dieses Konto bearbeiten«. Wenn es unter »Benutzervariablen für (Ihr Name)« schon einen Eintrag »PATH« gibt, wählen Sie diesen aus und klicken Sie auf »Bearbeiten...«, ansonsten legen Sie diesen an mit »Neu...«. Fügen Sie dann das Python-Installationsverzeichnis hinzu.
In der Kommandozeile können Sie den Python-Interpreter auf verschiedene Arten und Weisen verwenden. Die erste ist denkbar einfach; probieren Sie, einfach nur python – oder python3 – auszuführen:
Der Python-Interpreter ist jetzt im interaktiven Modus und wartet auf Ihre Befehle. Jetzt können Sie ganz gewöhnlichen Python-Code zeilenweise eingeben und bekommen sofort das Ergebnis angezeigt.
Um zurück in die Kommandozeile zu kommen, rufen Sie die Funktion quit() auf.
Das komplette Programm bei jedem Start von vorne eintippen zu müssen, wäre natürlich lästig. Stattdessen speichert man Python-Code in normalen Textdateien mit der Endung .py, um diese später vom Interpreter ausführen zu lassen. Öffnen Sie einen Texteditor Ihrer Wahl (für den Notfall reicht auch Notepad) und befüllen Sie das Dokument mit diesem kleinen Programm.
Bei Beispielen aus dem Internet finden Sie häufig als mystische erste Zeile #!/usr/bin/env python oder etwas Ähnliches. Dieser sogenannte Shebang teilt einem Unix-Betriebssystem mit, welcher Interpreter dieses Skript ausführen soll, falls Sie beim Aufruf keinen explizit spezifizieren. Unter Windows gibt es diesen Mechanismus sowieso nicht, und wir rufen auch sonst in den folgenden Beispielen den Interpreter immer explizit auf, weshalb die Zeile nicht benötigt wird.
Speichern Sie diese Datei unter dem Namen wurzel.py in einem Verzeichnis Ihrer Wahl ab. Hier wählen wir C:\dev\wurzel.py.
Achten Sie genau darauf, dass der Dateiname wirklich auf .py endet. Texteditoren haben manchmal die Angewohnheit, noch ein .txt zu ergänzen, sodass daraus wurzel.py.txt wird. Zudem blendet der Windows Explorer »hilfreicherweise« standardmäßig Dateiendungen aus, sodass man das Übel zuerst gar nicht entdeckt.
Navigieren Sie dann mit der Kommandozeile in selbiges Verzeichnis und starten Sie Ihr Programm wie folgt.
Gerade haben Sie die Datei wurzel.py als Skript ausgeführt. Häufig werden Sie aber auch über Beispiele stolpern, in denen zusätzlich noch der Parameter -m auftaucht. Das kann dann folgendermaßen aussehen.
Wozu ist das denn gut? Diese Option ist dazu da, um ein Python-Modul auszuführen. Im Beispielprogramm importieren wir als Allererstes das Modul math, um die darin definierte Funktion sqrt zu verwenden. Ihre Datei wurzel.py stellt ebenfalls automatisch ein Modul mit dem Namen wurzel bereit (beachten Sie die fehlende Dateiendung). Der Unterschied ist, dass Ihr Modul keine Funktionen definiert, sondern direkt ausführbaren Code enthält, den wir auf diese Art und Weise starten.
Da python -m ... keinen Dateipfad, sondern einen Modulnamen nimmt, muss der Python-Interpreter als Erstes auflösen, wo sich überhaupt die benötigten Dateien befinden. Dazu sucht er in folgender Reihenfolge:
im aktuellen Arbeitsverzeichnis,
in den Verzeichnissen der Umgebungsvariablen
PYTHONPATH
,
in den globalen Paketverzeichnissen (wo sämtliche Bibliotheken liegen).
Das auszuführende Programm muss also nicht zwangsläufig im aktuellen Arbeitsverzeichnis liegen, sondern kann mit einem kurzen Befehl von überall gestartet werden. Diesen Fakt machen wir uns später mit python -m pip und python -m venv zunutze.
Nicht alle erdenklichen Funktionen sind bei Ihrer Standardinstallation dabei, aber fast alle hat schon einmal jemand implementiert und (hoffentlich) veröffentlicht. Der zentrale Anlaufpunkt heißt PyPI beziehungsweise Python Package Index, zu finden unter https://pypi.org/. Das Programm pip kann diese in einem Rutsch für Sie herunterladen, installieren und verwalten.
In diesem Buch wird viel numerisch mit Vektoren und Matrizen gerechnet. Das Paket NumPy ist dafür unumgänglich. Um das Paket herunterzuladen und zu installieren, reicht der folgende Befehl:
Wo Sie gerade dabei sind, jetzt wäre der Moment, in einem Rutsch alle für dieses Buch benötigten Pakete zu installieren.
Alle Dateien des Pakets liegen jetzt im globalen Paketverzeichnis und sind in Ihren Programmen zum Import verfügbar. Dies können Sie prüfen, indem Sie sich alle installierten Pakete anzeigen lassen.
Die Deinstallation ist natürlich genau so einfach, und zwar mit python -m pip uninstall numpy.
pip ist zwar der am meisten genutzte Paketmanager und wird standardmäßig mit installiert, ist aber bei Weitem nicht der einzige. Wenn Sie zum Beispiel Python nicht von der Hauptseite installiert haben, sondern mit Anaconda, dann steht Ihnen der Paketmanager Conda zur Verfügung. Der Befehl lautet dann conda install ... und lädt nicht von PyPI herunter, sondern von den Conda-Paketquellen. Sie können aber auch weiterhin pip verwenden, beide vertragen sich gut miteinander.
Wenn Sie an einem bestehenden Python-Projekt arbeiten, war der vorherige Autor hoffentlich so freundlich, Ihnen eine Liste der benötigten Pakete zu hinterlassen. Per Konvention heißt diese requirements.txt und liegt im Hauptverzeichnis des Projekts. Der Inhalt sieht grundsätzlich wie folgt aus:
Sie können alle Pakete auf einmal installieren, indem Sie den Befehl python -m pip install -r requirements.txt ausführen.
Bis jetzt haben wir alle Pakete im globalen Paketverzeichnis installiert. Wenn Sie mehrere Projekte haben, geht das so lange gut, bis Sie in zwei Projekten unterschiedliche Versionen des gleichen Pakets brauchen. Möglicherweise ist das nicht einmal Ihre eigene Entscheidung, sondern ein völlig anderes Paket, das als Abhängigkeit eine alte Version eines bereits vorhandenen Pakets hat. Idealerweise hätten wir also eine Trennung zwischen Projekten, sodass in jedem Projekt nur die dafür benötigten Pakete in der jeweils richtigen Version installiert sind.
In der Python-Welt heißt die Lösung »virtuelle Umgebungen«. Nehmen wir für dieses Beispiel an, Ihr Projekt liegt ganz kreativ im Verzeichnis C:∖dev∖mein_projekt. Hier wollen Sie jetzt eine projektspezifische virtuelle Umgebung erstellen. Die Werkzeuge dafür werden im Modul venv mitgeliefert.
Dieser Befehl erstellt in Ihrem Projektverzeichnis einen Ordner env_projekt, der die virtuelle Umgebung enthält. Diese besteht aus einer Kopie des Interpreters sowie einem lokalen Paketverzeichnis, sie bildet sozusagen eine abgegrenzte Python-Installation. Wenn Sie mit dieser Umgebung arbeiten, müssen Sie sie vorher aktivieren.
Solange die Umgebung aktiviert ist, wird in der Kommandozeile immer (env_projekt) angezeigt. Wenn Sie jetzt python aufrufen, wird der Interpreter in der Umgebung mit seinen installierten Paketen genutzt. Mit pip können Sie dann Pakete installieren, ohne die globale Installation zu beeinflussen.
Deaktivieren Sie die Umgebung, um an einem anderen Projekt zu arbeiten.
Damit Sie schnell loslegen können, haben wir uns bis hier auf Werkzeuge beschränkt, die Sie vermutlich sowieso schon an Bord haben. Die folgenden Abschnitte stellen einige Alternativen zum schnöden Texteditor vor, die Ihnen langfristig das Leben erleichtern können.
