B - Universität Tübingen

Werbung
Bioinformatik
für Lebenswissenschaftler
Sandra Gesing
SS 2010
Python - Einführung
Abt. Simulation biologischer Systeme
WSI/ZBIT, Eberhard Karls Universität Tübingen
Python – Zuweisungen, Ausgaben
• Das einfachste das wir tun können ist zunächst die
beiden Strings zum Alignment zu definieren
• Beispielsweise wollen wir die Sequenzen ACGT und
AGT alinieren
• Diese Sequenzen können wir nun Variablen zuweisen,
damit wir
– bequem darauf Bezug nehmen können
– den Programmcode schreiben können, ohne die Sequenzen
im Programmcode zu verwenden (Trennung von Daten und
Code)
• Eine Zuweisung in Python erfolgt mit Hilfe des
Gleichheitszeichens:
A = 'ACGT'
• Die Anführungszeichen instruieren den Interpreter
(Python) dabei ACGT als Zeichenkette aufzufassen
2
Python – Zuweisungen, Ausgaben
•
•
•
•
•
•
A = 'ACGT'
A ist dabei der Name der Variablen, die nach der
Zuweisung den Wert ‘ACGT‘ besitzt
Entsprechend kann man nicht nur Zeichenketten, sondern
auch numerische Werte zuweisen:
Summe = 0
Weist z.B. der Variable mit dem Namen „Summe“ den
Wert Null zu
Die Namen von Variablen sind dabei frei wählbar, müssen
aber aus einem Wort bestehen (also keine Leerzeichen),
dürfen keine Sonderzeichen außer „_“ enthalten und
dürfen nicht mit einer Zahl anfangen
Gültige Namen:
meine_variable, Wert15
Ungültige Namen:
meine-Variable, 15ter_wert
3
Python – Ausgaben
• Möchte man in Python Ausgaben tätigen so erscheinen diese
standardmäßig auf der Konsole (dem Fenster in dem Sie gerade
arbeiten)
• Das Python-Kommando print gibt einen Text oder Werte aus
• Wir können dies am Prompt des Python-Interpreters
nachvollziehen:
• Beispiel:
Ausgabe des Textes „Bioinformatik“:
>>> print 'Bioinformatik'
Bioinformatik
>>>
Zuweisung und Ausgabe des Wertes einer Variablen:
>>> distanz = 15
>>> print distanz
15
>>>
4
Ausführung eines Programms
• Mit dem Interpreter kann man natürlich nicht nur interaktiv arbeiten,
sondern man kann ihn auch komplette Programme abarbeiten lassen
• Dabei liest der Interpreter das Programm vollständig und führt die
Zeilen nacheinander aus, beginnend mit der ersten Zeile
• Ein sehr triviales Programm kann z.B. das Produkt zweier Zahlen
berechnen und ausgeben:
x = 15
print 'x = ', x
y = 456
print 'y = ', y
print 'Produkt', x * y
• Der Operator * berechnet dabei das Produkt der beiden Zahlen, das
Komma trennt beim Print-Kommando unterschiedliche Ausgaben
voneinander
• Man kann dieses Programm nun in einer Datei speichern (z.B. unter
dem Namen „trivial.py“)
• Ruft man nun den Interpreter mit diesem Dateinamen als Argument
auf, so führt er das Programm aus („python trivial.py”)
5
Ausführen des Programms
• Um das Programm auszuführen, rufen wir nun von der
Kommandozeile aus den Interpreter mit dem
Dateinamen unseres Programmcodes auf
$ python trivial.py
x = 15
y = 456
Produkt 6840
x = 15
print 'x = ', x
y = 456
print 'y = ', y
print 'Produkt', x * y
• Der Interpreter lädt daraufhin das Programm und
arbeitet es Zeile für Zeile ab
• Die Zuweisungen erzeugen keine Ausgaben,
erscheinen also nicht auf der Konsole
6
Python – Strings
• Alle wichtigen Operationen auf Zeichenketten kann man auch in Python
auf einfachste Weise durchführen:
• Beispiel: ein String A = 'ACGT' und ein String B = 'AGT'
Problem
Notation
Python
Ergebnis
Auswahl eines
Zeichens
a1
b3
A[0]
B[2]
`A`
`T`
Konkatenierung BA
B+A
`AGTACGT`
Substring
A[2..3]
A[1:3]
`CG`
Präfix
A[1..2]
A[:2]
`AC`
Suffix
A[2..4]
A[1:]
`CGT`
Aufgepasst: Python nummeriert die Elemente eines Strings von Null an!
7
Python – Schleifen
• Kontrollstrukturen steuern den Ablauf eines
Programms
• Der Interpreter beginnt mit der Ausführung des
Programms in der ersten Codezeile und arbeitet das
Programm Zeile für Zeile ab
• Kontrollstrukturen erlauben es, diese Abfolge zu
verändern
• Schleifen zählen zu den wichtigsten
Kontrollstrukturen
• Sie erlauben es, bestimmte Codeteile (den
zugehörigen Schleifenkörper oder Rumpf) mehrmals
zu durchlaufen
• Die Anzahl Durchläufe durch die Schleife wird dabei
durch den Schleifenkopf gesteuert
8
Python – Schleifen
• Python kennt For-Schleifen, bei denen eine Schleifenvariable
eine Folge von Werten durchläuft und für jeden dieser Werte der
Rumpf ausgeführt wird
• Der Kopf definiert dabei die Schleifenvariable und die möglichen
Werte
• Der Rumpf wird vom Kopf durch Einrückung unterschieden
• Der Rumpf kann eine oder mehrere Zeilen Code enthalten
• Die Funktion range(Wert) erzeugt dabei eine Liste von Wert
Zahlen, die bei 0 anfangen und jeweils um eins erhöht werden
for i in range(10):
print i
• Dieses kurze Programm gibt dementsprechend die Zahlen von 0
bis 9 aus
9
Python – Bedingungen
• Bedingungen erlauben es Programmteile nur dann auszuführen,
wenn eine bestimmte Bedingung erfüllt ist
• In Python heißt das entsprechende Konstrukt if-else:
if distanz < 5:
print 'Distanz gering'
else:
print 'Distanz zu gross!'
• Die Bedingung der if-Zeile kann auf verschiedene
Vergleichsoperatoren zurückgreifen (Auswahl):
== Gleichheit
<
Echt kleiner
<= Kleiner oder gleich
!= Ungleichheit
>
Echt größer
>= Größer oder gleich
• Ist die Bedingung erfüllt, wird der Block nach if ausgeführt,
andernfalls der Block nach else
10
Python – Funktionen
• Funktionen in Programmiersprachen sind ähnlich zu
mathematischen Funktionen, es gibt jedoch einige Unterschiede
• Prinzipiell verwendet man Funktionen um häufig benutzten
Code nicht mehrmals schreiben zu müssen
• Funktionen sind abgeschlossene Codestücke, denen Argumente
übergeben werden und die einen Rückgabewert haben können
• In Python werden Funktionen mit Hilfe des def-Schlüsselwortes
definiert
• Funktionen haben einen Namen, eine Liste von Argumenten und
einen Codeblock der die eigentliche Rechnung durchführt
• Beispiel: Eine Funktion, die zu einer Zahl deren doppelten Wert
zurückliefert
def doppelt(x):
return 2 * x
print doppelt(4)
• Das Schlüsselwort return definiert dabei den Rückgabewert
der Funktion
11
Ein Pythonprogramm
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
12
Ein Pythonprogramm - Blöcke
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
13
Ein Pythonprogramm - Blöcke
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
14
Ein Pythonprogramm - Blöcke
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
15
Ein Pythonprogramm - Blöcke
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Einrückung immer mit Tab oder
Leerzeichen, aber Konsistent!
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
16
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
Zuweisung, “A” ist nun ein Text (String), mit Wert: ACGT
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
17
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
18
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
19
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Dieser Block wird nicht ausgeführt sondern
nur registriert! Immer wenn im weiteren
Verlauf nun die Funktion d aufgerufen wird,
wird dieser Block ausgeführt.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
20
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0 Zuweisung, “distanz” ist nun eine (Ganz-)Zahl, Wert 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
21
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
22
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Um die for Schleife ausführen zu können muss
zuerst der innerste Ausdruck ausgewertet
werden. In diesem Fall “len(A)”, die
Auswertung ergibt den Wert 4.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
23
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Nun kann der range Befehl ausgewertet
werden. In diesem Fall hat der das Argument
4. Das Ergebnis davon ist eine Liste:
[0, 1, 2, 3]
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
24
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Die for Schleife wird nun 4 mal ausgeführt,
wobei die Laufvariable i nacheinander die
Werte 0-3 annimmt. Bei jedem Durchlauf wird
der darunterstehende Block ausgeführt.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
25
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Im Block der Schleife wird wiederum der
innerste Befehl zuerst ausgeführt. Ein Zugriff
auf den i.ten Buchstaben im Text A. Im ersten
Durchlauf (i == 0) hat A[i] also den Wert 'A'.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
26
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
B[i] wird gleich ausgewertet. Die Auswertung
ergibt ebenfalls den Wert 'A'
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
27
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Nun kommt die Auswertung von d. Dazu springt
Python an die Stelle im Programm an dem d
definiert wird und führt diese Stelle aus.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
28
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
d wird aufgerufen mit den
Argumenten a=='A' und b=='A', beides
sind Buchstaben, das findet Python
erst jetzt heraus!
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
29
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Die Buchstaben die in a und b stecken
werden nun verglichen, in unserem
Fall sind beide gleich, also wird direkt
in der unteren Zeile weitergemacht.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
30
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Mit dem return Kommando wird der
Block der mit def begonnen hat
beendet. Python springt wieder an die
Stelle zurück von der d aufgerufen
wurde.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
31
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
d(A[i], B[i]) ergibt einen Wert von 0.
Damit lässt sich “distanz” neu
berechnen:
0 = 0 + 0 → das ergibt wiederum 0
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
32
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
Analog werden die drei restlichen
Durchläufe ausgewertet. Wobei beim
Zweiten der Vergleich (i == 1) in d
Ungleichheit ergibt und damit 1
zurückgegeben und zu “distanz”
addiert wird
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
33
Ein Pythonprogramm - Ablauf
A = 'ACGT'
B = 'A-GT'
def d(a, b):
if a == b:
return 0
else:
return 1
In der letzten Zeile gibt das print
Kommando zuerst den Text und
danach den Wert von “distanz” aus.
Das Programm ist damit
durchgelaufen.
distanz = 0
for i in range(len(A)):
distanz = distanz + d(A[i], B[i])
print 'Distanz des Alignments:', distanz
34
Herunterladen