#!/usr/bin/python # -*- coding: utf-8 -*- # # Python Beispiele zu # http://www.thomas-guettler.de/vortraege/python/einfuehrung.html # # (c) 2003-2012 Thomas Güttler # http://www.thomas-guettler.de/ # # Beispiel ZINSEN: # Ein Versicherungsvertreter verspricht dir, dass du einen großen # Betrag bekommst, wenn du 35 Jahre jährlich 900 Euro einzahlst. Du # willst nun wissen, wieviel Geld du hättest, wenn du keine # Rentenversicherung abschließt, sondern das Geld mit 5 Prozent # Zinsen anlegst. Vielleicht gibt es dafür eine Formel, aber iterativ # (in einer Schleife) lässt sich das auch leicht berechnen. sum=0 for i in range(35): sum*=1.05 # 5 Prozent Zinsen sum+=900 print 'Jahr %s Betrag: %s' % (i+1, sum) #--------------------------------------------------------------------- #Beispiel FIFO: #FIFO (first in first out) (Queue) #Vergleich: Autobahntunnel # l=[] # Nehme eine leere Liste for i in range(10): l.append(i) # An Liste anhängen print l while l: # Solange 'l' nicht leer ist ... print l.pop(0) # Entferne erstes Element der Liste #Ergebnis: 0, 1, 2, ... #--------------------------------------------------------------------- #Beispiel FILO: #FILO (first in last out) (Stack) #Vergleich: Stapel von Münzen # l=[] for i in range(10): l.append(i) while l: print l.pop() # Entferne letztes Element der Liste #Ergebnis: 9, 8, 7, ... #--------------------------------------------------------------------- #Beispiel ZÄHLEN for i, wort in enumerate(['null', 'eins', 'zwei']): print i, wort # 0 null, 1 eins, .... #--------------------------------------------------------------------- #Beispiel ENDE: #Das dicke Ende # file='foo.jpg' if file[-4:]=='.jpg': #unschön print 'Foto' if file.endswith('.jpg'): #besser, analog 'startswith()' print 'Foto' #--------------------------------------------------------------------- #Beispiel DIE WAHRHEIT: #Was ist wahr und was ist falsch? #Folgende Bedingungen sind wahr: # if True: print 'wahr' if 1: print 'wahr' if -1: # Alle Zahlen außer 0 sind wahr print 'wahr' if '0': # Nichtleere Zeichenkette print 'wahr' if 'False': # Nichtleere Zeichenkette print 'wahr' if [[]]: # Nichtleere Liste print 'wahr' if not False: print 'wahr' if not 0: print 'wahr' if not []: # Leere Liste print 'wahr' if not {}: # Leeres Dictionary print 'wahr' if not '': # Leere Zeichenkette print 'wahr' if not None: print 'wahr' if not bool('0'): print 'wahr' if True and True: print 'wahr' if False or True: print 'wahr' #--------------------------------------------------------------------- #Beispiel REFERENZ: #Referenz vs. Kopie # list1=[1, 2, 3, 4] list2=list1 # Zwei Referenzen zeigen auf eine Liste list2[0]=5 print list1==list2 # --> 1 list1=[1, 2, 3, 4] list2=list1[:] # Erstelle eine Kopie der ersten Liste list2[0]=5 print list1==list2 # --> 0 #--------------------------------------------------------------------- #Beispiel UNIQUE a: #Doppelte Einträge aus einer Liste entfernen: mylist=[1, 1, 7, 7, 7, 6, 2, 3, 4, 4, 4, 5] unique={} # dictionary for item in mylist: unique[item]=1 mylist=unique.keys() mylist.sort() print mylist # --> [1, 2, 3, 4, 5, 6, 7] #Beispiel UNIQUE b: #Besser mit set (Menge) mylist=[1, 1, 7, 7, 7, 6, 2, 3, 4, 4, 4, 5] myset=set(mylist) mylist=list(myset) mylist.sort() print mylist # --> [1, 2, 3, 4, 5, 6, 7] #--------------------------------------------------------------------- #Beispiel SORTDICT: #Ein Dictionary sortieren. #Da Dictionaries nicht sortiert gespeichert werden, #will man sie für die Ausgabe ggf. sortieren: mydict={'a': ['Auto', 'Ampel'], 'b': ['Bus', 'Banane'], 'c': ['Chemnitz', 'Chaos'], 'd': ['Dame', 'Diesel'], 'e': ['Esel']} print 'Unsortiert:', mydict for buchstabe, woerter in sorted(mydict.items()): print '%s: %s' % (buchstabe, woerter) #--------------------------------------------------------------------- #Beispiel SORTITEMS a: #Sortieren einer Liste von Paaren. #Die Einträge bestehen aus einer ID und einem Namen. #Die Liste soll anhand der Namen sortiert werden. # mylist=[ (1, 'Dresden'), (2, 'Chemnitz'), (3, 'Bayreuth'), (4, 'Freiburg'), (5, 'Berlin')] def mycmp(a, b): # Bsp: a==(1, 'Dresden') und b==(2, 'Chemnitz') # Diese Compare (Vergleichs) Funktion, vergleicht # jeweils die zweiten Einträge in der Liste. return cmp(a[1], b[1]) # Es wird eine Referenz auf unsere Sortierfunktion übergeben. # Analog einem Funktionspointer in C. mylist.sort(mycmp) print mylist # Erläuterung: Die built-in Funktion 'cmp' vergleicht zwei # Elemente. Sie gibt 0 zurück falls beide identisch sind, -1 falls das # erste kleiner ist, und 1 falls das erste Element größer ist. # Beispiele: # cmp( (1, 2, 3), (1, 2, 3) ) ---> 0 # cmp( (1, 2, 3), (1, 2) ) ---> 1 # cmp( (1, 100), (2, 1) ) ---> -1 # cmp( (1, 2), (1, 3) ) ---> -1 #Beispiel SORTITEMS b: #Wenn 'mycmp' auf Daten zugreifen muss, die nicht #in den Argumenten a oder b stehen, kann man mit #'Decorate Sort Undecorate' (DSU) arbeiten, das bei großen Listen #auch schneller ist als 'mycmp' #Siehe auch http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52234 names={ 1: 'Dresden', 2: 'Chemnitz', 3: 'Bayreuth', 4: 'Freiburg'} decorated=[] for key, stadt in names.items(): decorated.append((stadt, key)) decorated.sort() # Es wird nach Städten sortiert ids=[] for stadt, key in decorated: ids.append(key) print ids # ids ist nun entsprechend den zugehörigen Werten in 'names' sortiert #--------------------------------------------------------------------- ##Beispiel DOWNLOAD: ##Herunterladen eine Webseite: # #import urllib2 #fd=urllib2.urlopen('http://www.python.org/') #content=fd.read() #fd.close() #print content # #--------------------------------------------------------------------- ##Beispiel WEBBROWSER: ##Anzeigen der heruntergeladene Seite in einem Browser: ##Es wird der Standard-Browser des System genommen (Netscape, Mozilla, IE, ...) # #import tempfile #import webbrowser #htmlfile=tempfile.mktemp('foo.html') #fd=open(htmlfile, 'w') #fd.write(content) #fd.close() #webbrowser.open('file://%s' % htmlfile) #--------------------------------------------------------------------- #Beispiel ISOTIME: #Datum im ISO-Format (2003-12-31 23:59:59) # import time print 'Es ist jetzt: %s' % time.strftime('%Y-%m-%d %H:%M:%S') #--------------------------------------------------------------------- # Beispiel CHARCOUNT: # Zähle wie oft die Zeichen einer Datei vorkommen datei='beispiele.py' fd=open(datei) inhalt=fd.read() # Lese die gesamte Datei countdict={} # Erstelle leeres Dictionary for char in inhalt: # char (character) == Zeichen old=countdict.get(char, 0) # Falls Zeichen noch nicht gezählt, nehme die Null old+=1 # Zähle um eins hoch countdict[char]=old # Speichere Zähler im Dictionary (char == key (Schlüssel) items=countdict.items() # Liste [(key1, value1), (key2, value2), ...] items.sort() # Sortiere die Liste nach den Zeichen for char, count in items: if char=='\n': char='\\n' # Newline als \n ausgeben. print 'Zeichen %s: %4d' % ( # %4d --> rechtsbündig (vier Zeichen) char, count) #--------------------------------------------------------------------- #Beispiel ISSTRING #Ist ein Objekt eine Zeichenkette? # myobj='abc' if isinstance(myobj, basestring): print 'Ja, das ist eine Zeichenkette: %s' % myobj #--------------------------------------------------------------------- #Beispiel UNICODE: #Zeichensatz-Konvertierung: # text=u'Der in deutschland übliche Zeichensatz: iso-8851-1 (latin1)' # wg u'... Unicode print len(text) print len(text.encode('latin1')) # von Unicode zu Bytefolge print len(text.encode('utf8')) # von Unicode zu Bytefolge # 59, 59, 60 #--------------------------------------------------------------------- #Beispiel UNICODE II: #Bytefolge vs Unicode print len('üöäß') print len(u'üöäß') #--------------------------------------------------------------------- #Beispiel UNICODE III: #Einzelnes de- und encode() vermeiden. import codecs content=codecs.open('beispiele.py', 'rt', 'utf8').read() #--------------------------------------------------------------------- #Beispiel EINMALEINS: #Das Einmaleins als HTML-Tabelle # import tempfile import webbrowser rows=[] heading=[] for i in range(1, 11): heading.append('
| %s |
|---|