|
|
Einsteigerkochbuch |
|
|---|
|
|
Auf dieser Seite werden kurze Funktionen zusammengestellt, die in Modulen ihre Arbeit tun und wiederverwendungsfähig sind und sich besonders dadurch auszeichnen, dass sie irgendetwas pythonspezifisches verwenden, das in anderen Programmiersprachen so nicht gehen würde. Teilweise sind diese Beispiele mir mal irgenwann/irgendwo positiv aufgefallen, teilweise stammen sie aus Hinweisen anderer Python-Fans. Die Sammlung wird anfangs klein sein, also bitte ich die Enttäuschung zu unterdrücken. Aber in der Hoffnung, dass die Sammlung wächst und wächst und wächst ... :-) Da es auf dem Büchermarkt noch kein Buch gibt mit dem Titel "Algorithmen für Python", und schon gar kein deutschsprachiges, soll diese Sammlung dem Neuling helfen, sich schneller in die wahnsinnig umfangreichen Lösungsmöglichkeiten hineinzufinden. Um dem breiten Grinsen der alten Python-Insider vorzubeugen, diese Seite ist für Einsteiger gedacht. Speziell Umsteiger von anderen Sprachen finden hier die Dinge, an die man sich erst gewöhnen muß, mit denen man nicht rechnet, weil man es doch viele Jahre ganz anders gemacht hat. Nur ein kleines selbsterlebtes Beispiel. Als ich das erste mal in einem String ein einzelnes Zeichen ändern wollte, schrieb ich mir folgende mid() - Funktion, die auch ihre Arbeit machte: # in einem String das Zeichen an der i-ten
Position überschreiben s = 'Das @ steht an der Position 4' # Antwort: Das * steht an der Position 4 Später fand ich in irgend einem Beispielprogramm dann eine Schreibweise, die nichts weiter machte, als eben die Python - Eigenschaften zu nutzen und reichlich eleganter war: def mid(s, pos, ch): s = 'Das @ steht an der Position 4' Noch später fand ich eine
Möglichkeit, eine eigene Stringklasse so zu formulieren, die mit
Index angesprochen werden kann, so dass veränderliche
Strings herauskommen. So wird sichtbar, dass Python immer
wieder neue kleine Entdeckungen zuläßt, je länger man
sich mit der Sprache beschäftigt. Da diese
"Überraschungen" bei Python überwiegend positiv sind,
schätze ich Python immer mehr! Sammlung der Funktionsbeispiele
mathematische Funktionen Primzahlen def primzahl(anfang, ende): primzahl(13, 23) 13 17 19 23 Fakultät # Fakultätsfunktion (nichtrekursiv) def fakul1(n): # Fakultätsfunktion mit Anwendung der Rekursion def fakul2(n): print fakul1(4) 24 Anmerkungen: Offensichtlich ist die rekursive Darstellung kürzer. Sie
schein auch eleganter, was wohl auch geschmackssache sein dürfte.
Aber solche Probleme, bei denen sich eine rekursive Vorgehensweise
anbietet, wie z.B. bei der Fakultätsberechnung, lassen sich auch
in
anderer Schreibweise nicht rekursiv lösen. Vergleich, ob x in einem bestimmten Intervall liegt Will man so etwas in Pascal machen, benötigt man solche Konstrukte: if 3 < x then oder if (3 < x) and (x < 5) then ... In Python geht das mehr so, wie es in der Mathematik auch gemacht wird. Beispiel: def view(x): for i in range(0,6): Das bringt dann als Resultat: 4 trifft zu Umgang mit Variablen, Strings, Listen
und Dictionarys Seit der Version 2.x gibt es nun auch eine Kurzschreibweise für das Inkrementieren Langform: a = a + 1 Kurzform: a += 1 Diese kombinierten Operatoren gehen übrigens auch in anderen Varianten, z.B. a -= 1 # zum dekrementieren a **= 2 # zum Potenzieren 'hallo' += '!' # also auch mit Strings, na prima! also insgesamt schon eine schöne Hilfe, besonders zur Freude der bsiherigen C - Programmierer. # Vertauschen zweier Variabler: a = 1 # Splitten eines Tupels a, b, c = (100, 200, 300) # Umwandeln von String oder Tupel in eine Liste a = 'Hallo' # Verkettungen von Zeichen, String, Tupel und Liste # Zeichen = String aus 1 Zeichen # Strings # Tupels # Listen # Verkettung von gleichen Typen # Verkettung verschiedener Typen # von einem String n Zeichen von links hernehmen a = '1234567' # einen String herstellen, der aus n gleichen Zeichen besteht pythonuntypisch, wenn auch auch funktionstüchtig wäre: def zeile(ch, n): Nicht jeder Umsteiger denkt nämlich daran, dass es unter Python ja so geht: def zeile(ch, n): # in einem String das Zeichen an der i-ten Position überschreiben Dieses Beispiel steht in den
Vorbemerkungen, wo es als Beispiel für das Ziel dieser Sammlung
dienen soll. :-) # Liste Sortieren, Liste umgekehrt ordnen Nichts einfacher als das: a = ['paul', 'artur', 'beate', 'rudi'] das bringt folgende Ausgabe: ['artur', 'beate', 'paul', 'rudi'] ['rudi', 'paul', 'beate', 'artur'] # Eine Liste mit n Leerzeichen herstellen (Vergleichbar einem char - array) # hier z.B. mit 20 Leerzeichen a = 20 *[' ']) # aha, hier geht es also auch mit dem * - Operator!! print a [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] Anmerkung: Das hier geschaffene Gebilde ist nun wie üblich ansprechbar wie ein array: a[5] = 'X' [' ', ' ', ' ', ' ', ' ', 'X', ' ', '
', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
Eine Funktion soll sich ihre Vorgeschichte merken Eine Funktion legt für ihren Namensraum lokale Variable an, die nach Beendigung der Funktion "weggeworfen" werden. Daher ist bei einem erneuten Aufruf der Funktion wieder alles "neu" und was früher war, ist vergessen. Mitunter möchte man sich aber die Vorgeschichte merken. Hier ein Beispiel für eine Funktion, die kumulativ Summanden aufaddiert und sich die entstandene Summe zum späteren Weitermachen merkt: # Funktion merkt sich eine VorgeschichteDer Trick an der Sache ist die Benutzung eines Attributes, das ein Pythonobjekt haben kann. Auch eine Funktion kann dies haben, hier die Variable fu.summe. Anderes Programm aus einem Pythonscript heraus aufrufen Um aus Python heraus ein anderes Programm aufzurufen oder einen Befehl zu geben, der sonst auf der Kommandozeile eingegeben wird, kann man mit dem system - Befehl aus dem Modul os einen Textstring übergeben, der dieses Kommando beinhaltet: import os a = os.system('ls -l > files.txt') Die Zuweisung des Rückgabewertes an a verhindert, das dieser Wert auf dem Bidlschirm erscheint. Die Ausgabe des Befehls 'ls -l' wird in das File 'files.txt' umgeleitet und kann z.B. dort von Python gelesen werden: f = open('files.txt', 'r') s = f.readlines() for i in s: print s f.close() prüfen, ob ein File existiert Wer versucht, ein nichtexistierendes File zum lesen zu öffnen, erntet eine Fehlermeldung. Daher prüft man vorher. Das macht man mit der Funktion isfile(suchname),die im Modul os steckt. Hier ein kleines Beispiel zum probieren: # prüfen, ob ein bestimmtes File existiert import os def fileexists(suchname): fileexists('file.py') Abhängig davon, ob beispielsweise das File 'file.py' auf Eurem Rechner im aktuellen Pfad steht, kommt die passende Antwort. Achtung: Das File kann auch mit Pfadangaben hinterfragt werden. Auf Windows-Rechnern ist dazu der '\' entsprechend mit einem vorangesetzten weiteren '\' zu maskieren oder ein Raw-String (Rohstring) zu übergeben. Das geht dann so: fileexists('c:\\autoexec.bat') oder fileexists(r'c:\autoexec.bat') Shell für den Textmodus mit einzelnen Kommandos Ein anschauliches Beispiel für
eine solche einfache
Lösung, die zwar ohne Grafik auskommt, dafür aber
unkompliziert ist, kann anhand des praktischen Beispiels
nachvollzogen werden, das ich im Einsteigerkurs beschreibe.
Das Listing einer solchen Shell ist hier
zu sehen, wobei hier die Funktion
shell() insbesondere gemeint ist. Es handelt sich um eine While -
Schleife ohne Abbruchbedingung. Damit trotzdem das Programm mal beendet
werden kann, gibt es nach Eingabe des Zeichens "q" für quit einen
break - Befehl, der die Schleife zwangsweise verläßt. |