Einführung in Python (1)

Werbung
Kapitel 7:
Einführung in Python (1)
Einführung in die Informatik
Wintersemester 2007/08
Prof. Bernhard Jung
Übersicht
„
„
Die Programmiersprache Python
Einfache Anweisungen
‰
‰
Zuweisungen
Eingabe
„
Auswahl-Anweisung
„
Wiederholungen
‰
‰
‰
if-Anweisung
for-Schleife
while-Schleife
Literatur
„ M. Weigend. Objektorientierte Programmierung mit Python. MITP. 2006.
„ J. Elkner and A. B. Downey. How to Think Like a Computer Scientist.
Learning with Python 2nd Edition. http://www.ibiblio.org/obp/thinkCSpy/
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
1
Python
„
höhere Programmiersprache
‰
eigentlich "VHLL" (very high-level language),
http://en.wikipedia.org/wiki/Very_high-level_programming_language
„
interpretiert
‰
‰
„
interaktive Benutzung möglich
keine Compilierung notwendig
umfasst mehrere Programmierparadigmen
‰
‰
‰
objektorientiert
rein imperative/prozedurale Programmierung möglich
Aspekte funktionale Programmierung
„
einfach zu lernen
„
plattformunabhängig
‰
‰
‰
„
„
Verzicht auf nicht unbedingt notwenige Sprachelemente
Windows, Linux, Mac, Unix, …
Smart phones
open source, nichtkommerziell
benannt nach "Monty Python"
‰
und auch so ausgesprochen
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
http://people.mandriva.com/~prigaux/language-study/
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
2
Programmierung in Python – Aspekte imperativer und
prozeduraler Programmierung
„
imperative Programmierung
‰
‰
‰
‰
Programm ist Folge von Befehlen
sukzessive Änderung des Speicherinhalts
(Variablenwert)
Typische Strukturen: Schleifen, bedingte
Anweisungen
Ein imperatives Programm sagt präzise:
„
„
„
„
was (welche Anweisung),
wann (Reihenfolge der Anweisungen)
womit (Speicherplatz/Variable) zu geschehen hat.
prozedurale Programmierung
‰
‰
‰
‰
Mittel zur Strukturierung in (imperativen)
Programmiersprachen
Prozedur = Unterprogramm
Aufruf mit Argumenten im Programm
Ziel: Übersichtlichkeit; Wiederverwendbarkeit
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
Python:
• Anweisungen
• print "Hallo"
• Variablen, Zuweisungen
•i=5
• if … else
• for … in …:
• while …
•…
Python:
• Aufruf von Funktionen
• abs(-5)
• Definition von Funktionen
• def fktname(…):
…
TU Bergakademie Freiberg
Python im interaktiven Modus
„
Python Interpreter in Konsole
‰
„
Python-Shell von IDLE
‰
‰
‰
„
Windows: Start | Programme |
Python 2.5 | Python (command line)
IDLE: einfache Entwicklungsumgebung
IDE = Integrated Development
Environment
z.B. Syntax Highlighting
ERIC IDE
‰
‰
‰
http://www.riverbankcomputing.co.uk
/pyqt/download.php
viele Features für professionelle
Softwareentwicklung
… die in dieser Vorlesung aber nicht
benötigt werden
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
3
Zuweisungen
„
Zuweisung
‰
Variable = Ausdruck
‰
Typ der Variable muss nicht deklariert
werden!
„
„
‰
„
Æ dynamische Typisierung
erweiterte Zuweisung
‰
Variable += Ausdruck
Kurzform für:
Variable = Variable + Ausdruck
‰
ebenso: -=, *=, /=, %=
‰
„
wie z.B. Java, C, C++, …
(etwa: int a = 1)
Variable wird zur Laufzeit mit Typ des
zugewiesenen Werts assoziiert
Variablen müssen vor ihrer
Verwendung erzeugt worden sein
‰
sonst Fehlermeldung
Prof. B. Jung
>>> a = 1
>>> a += 3
>>> print a
4
>>> type(a)
<type 'int'>
>>> a = "hello"
>>> print a
hello
>>> type(a)
<type 'str'>
>>> x, y = 3.0, -2.0
>>> x, y = y, x
>>> print x, y
-2.0 3.0
>>> a = b
Traceback (most recent call last):
File "<pyshell#63>", line 1, in
<module>
a = b
NameError: name 'b' is not defined
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Zuweisungen für mehrere Variablen
„
Zuweisung desselben Werts an mehrere
Variablen
‰
„
Variable1 = Variable2 = … = Ausdruck
Zuweisung unterschiedlicher Werte an
mehrere Variablen
‰
‰
Variable1, Variable2, … = Ausdruck1,
Ausdruck2, …
nützlich z.B. zum Austausch der Inhalte
zweier Variablen
„
Prof. B. Jung
>>> a = b = c = -1.0
>>> a
-1.0
>>> b
-1.0
>>> c
-1.0
>>> x, y = 3.0, -2.0
>>> x, y = y, x
>>> print x, y
-2.0 3.0
in anderen Programmiersprachen wird
dazu Hilfsvariable benötigt
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
4
Variablenamen:
Bezeichner (Identifier)
„
Namen von Variablen, Funktionen, Klassen, …
‰
‰
„
bestehen aus Buchstaben, Ziffern, Underscore (_)
Ziffer darf nicht am Anfang stehen
wie in den den meisten anderen Programmiersprachen auch
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
EBNF
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
Bsp: ungültige
Variablennamen
>>> 99Luftballons = "Hast du etwas Zeit für mich"
SyntaxError: invalid syntax
>>> more€ = 1000000
SyntaxError: invalid syntax
>>> class = "Einfuehrung in die Informatik"
SyntaxError: invalid syntax
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Schlüsselwörter
„
„
Wörter mit spezieller Bedeutung
sind reserviert
‰
„
können nicht als Bezeichner (Identifier) verwendet werden
gibt es in allen Programmiersprachen
‰
in Python relativ wenige
and
as
assert
break
class
continue
def
Prof. B. Jung
del
elif
else
except
exec
finally
for
from
global
if
import
in
is
lambda
not
or
pass
print
raise
return
try
Einführung in die Informatik, WS 2007/08
while
with
yield
TU Bergakademie Freiberg
5
Namenswahl für Variablen
Einige Tipps
„
lesbare aber nicht zu lange Namen
‰
z.B. sum, value
„
Hilfsvariablen, die man nur über kurze Strecken braucht, eher kurz:
„
Variablen, die man im ganzen Programm braucht, eher länger:
‰
‰
„
z.B. inputText
mit Kleinbuchstaben beginnen,
Worttrennung durch Großbuchstaben oder "_"
‰
„
z.B. i, j, x
z.B. inputText, input_text
Englisch oder Deutsch?
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Aufruf von Funktionen
„
Funktion
‰
übernimmt i.a. Argumente (Parameter) als Eingabewerte
‰
verarbeitet diese nach einem Algorithmus
und liefert i.a. einen Wert zurück
„
‰
„
„
manche Funktionen haben keine Eingabeparameter
manche Funktionen liefern keinen Wert zurück
Beispiele für Standardfunktionen von Python
>>>
65
>>>
5
>>>
8
>>>
3
Prof. B. Jung
ord("A")
abs(-5)
max([5,3,8,4])
len("abc")
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
6
Aufruf von Funktionen
„
Format des Ausrufs: funktion(arg1, arg2, …)
‰
‰
„
Funktionen akzeptieren i.d.R. nur eine bestimmte Anzahl von Argumenten
Die übergebenen Argumente müssen von einem bestimmten Typ sein
Beispiel: Standardfunktion len() – Länge von Strings, Listen, Tupeln,
Dictionaries
‰
Fehlerhafte Aufrufe
„
„
‰
Korrekte Aufrufe
„
„
„
„
„
len(1) – 1 ist eine Zahl und besitzt keine Länge
len("eins", "zwei") – Die Funkion len() akzeptiert nur ein Argument
len("Wort") Æ 4
len([1,2,3,4]) Æ 4
len("sha" + 4 * "la") Æ 11 (Auswertung des Ausdrucks ergibt String)
len( (1, 2, (3,4) ) ) Æ 3 (Tupel mit 3 Elementen)
Manche Funktionen akzeptieren eine variable Anzahl von Parametern
‰
z.B. min(1,2,3,4,5) Æ 1
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
Methodenaufrufe
„
„
„
„
Python: objektorientierte Sprache
Methode = Funktion, die an Objekt
gekoppelt ist
Aufruf einer Methode:
‰
objektname.methodenname()
‰
ggfs Aufruf mit Parametern
z.B. Methoden für Listen:
‰
„
reverse(), sort(), extend(), append(),
remove(), …
TU Bergakademie Freiberg
>>> liste = [4,2,3,1]
>>> liste.reverse()
>>> liste
[1, 3, 2, 4]
>>> liste.sort()
>>> liste
[1, 2, 3, 4]
>>>
liste.extend([5,6])
>>> liste
[1, 2, 3, 4, 5, 6]
>>> liste.remove(3)
>>> liste
[1, 2, 4, 5, 6]
In Python ist alles ein Objekt
‰
z.B. auch Integer
„
„
‰
allerdings sind Methoden hier versteckt
… und müssen i.d.R. nie direkt aufgerufen
werden
in C, C++, Java sind Integer u.a.
primitive Datentypen, also keine Objekte
Prof. B. Jung
>>> i = 2
>>> type(i)
<type 'int'>
>>> i.__neg__()
-2
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
7
Eingabe
„
Eingabe in der Python-Shell
‰
raw_input()
‰
input()
„
„
Rückgabewert ist immer vom Typ String
Typ des Rückgabewerts entsprechend Eingabewert
>>> i = input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'int'> 11
>>> i = raw_input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'str'>
Traceback (most recent call last):
File "<pyshell#34>", line 1, in -toplevelprint type(i), i + 1
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Prof. B. Jung
TU Bergakademie Freiberg
Einführung in die Informatik, WS 2007/08
Interaktive Eingabe - Beispiele
Prof. B. Jung
>>> name = raw_input("Geben Sie Ihren Namen ein: ")
Geben Sie Ihren Namen ein: Jung
>>> print name
Jung
>>> type(name)
<type 'str'>
>>> zahl = raw_input("Geben Sie einen Wert ein: ")
Geben Sie einen Wert ein: 10
>>> print zahl
10
>>> type(zahl)
<type 'str'>
>>> zahl = input("Geben Sie einen Wert ein: ")
Geben Sie einen Wert ein: 10
>>> type(zahl)
<type 'int'>
>>> a = input()
[1,2,3]
>>> type(a)
<type 'list'>
>>> input("Geben Sie einen Wert ein: ")
Geben Sie einen Wert ein: 7 * 3
21
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
8
Kommentare in Python
„
Programmzeilen, die mit '#' beginnen sind Kommentare
# compute the percentage of the hour that has elapsed
percentage = (minute * 100) / 60
„
Kommentare können auch in der Mitte von Programmzeilen beginnen
percentage = (minute * 100) / 60
„
# caution: integer division
Kommentare in Programmen dienen der Dokumentation des Codes
‰
Kommentare werden vom Python-Interpreter nicht ausgewertet
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Kommentare
„
Sinnvoll kommentieren!
„
statt unklares Programm mit Kommentar, besser klares Programm ohne
Kommentar
‰
‰
‰
alles kommentieren, was Erklärung bedarf
nicht kommentieren, was ohnehin schon im Programm steht;
folgendes ist z.B. unsinnig
zaehler += 1
„
# Zaehler inkrementieren
Sprache in Kommentaren und Namen
‰
‰
‰
‰
‰
‰
‰
Deutsch
+ einfacher
Englisch
+ meist kürzer
+ passt besser zu den englischen Schlüsselwörtern (if, while, ...)
+ Programm kann international verteilt werden (z.B. über das Web)
Jedenfalls: Deutsch und Englisch nicht mischen!!
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
9
If-Anweisung
vgl. Programmablaufplan (Kap. 5)
„
„
„
if ( <Bedingung> ):
<Anweisungen>
if ( <Bedingung> ):
<Anweisungen>
else:
<Anweisungen>
ja
A1
B
nein
A2
Aufbau:
‰
‰
if – Schlüsselwort
Bedingung – kann zu True oder False evaluiert werden
„
„
auch komplexe Bedingungen, z.B. verknüpft mit and
if ( a > 5 ) and ( a < 10 ):
‰
Doppelpunkt
Anweisungen, die ausgeführt werden, falls Bedingung gilt
‰
optionaler else-Teil
‰
„
Prof. B. Jung
eingerückt !
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
If-Anweisung - Beispiele
if x > 0:
print "x ist positiv"
if x % 2 == 0:
print x, "ist gerade"
else:
print x, "ist ungerade"
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
10
Verschachtelte if-Anweisungen
if x == y:
print x, "and", y, "are equal"
else:
if x < y:
print x, "is less than", y
else:
print x, "is greater than", y
if raw_input("can it fly? ") == 'y':
print "bird"
else:
if raw_input("does it bark? ") == 'y':
print "dog"
else:
print "cat"
Entscheidungsbaum
für Tiereraten
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
If-Anweisung, mehrfache Alternative
„
elif Abk. für 'else if'
B
W1
„
„
„
beliebig viele elif-Zweige
möglich
… aber höchstens ein else
else darf nur am Ende
stehen
if x == y:
print x, "and", y, "are equal"
elif x < y:
print x, "is less than", y
else:
print x, "is greater than", y
Prof. B. Jung
W2
A1
A2
sonst
A3
if choice == 'A':
functionA()
elif choice == 'B':
functionB()
elif choice == 'C':
functionC()
else:
print "Invalid choice."
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
11
for-Schleife
„
Muster:
Beispiel:
for <variable> in <sequenz>:
<anweisungen>
for i in ['a','b','c']:
print i
Aufbau von Schleifen
‰
‰
for – Schlüsselwort, Name der Anweisung
Indexvariable i
„
‰
‰
„
‰
‰
Name der Variable kann frei gewählt werden
in – Schlüsselwort, fester Teil der Anweisung
Eine Sequenz bzw. Ausdruck der eine Sequenz liefert
zur Erinnerung (Kap. 6 Datenstrukturen): Sequenz = Liste, String, oder Tupel
Doppelpunkt ':'
Rumpf der Schleife
„
eingerückt
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
for-Schleife
„
for <variable> in <sequenz>:
<anweisungen>
for i in ['a','b','c']:
print i
1.
2.
3.
Schleifendurchlauf: i = 'a' Æ Ausgabe: a
Schleifendurchlauf: i = 'b' Æ Ausgabe: b
Schleifendurchlauf: i = 'c' Æ Ausgabe: c
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
12
for-Schleife
„
for <variable> in <sequenz>:
<anweisungen>
for i in [4,6,9]:
print i
1.
2.
3.
Schleifendurchlauf: i = 4 Æ Ausgabe: 4
Schleifendurchlauf: i = 6 Æ Ausgabe: 6
Schleifendurchlauf: i = 9 Æ Ausgabe: 9
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Die range()-Funktion
„
range()-Funktion
‰
‰
‰
‰
Signatur: range([start,] stop[, step]) -> list of integers
Generierung von Listen mit Elementen zwischen den beiden InputParametern
falls nur 1 Input-Parameter: impliziter Startwert 0
optionaler dritter Input-Parameter bestimmt Inkrement
>>> print range(1,4)
[1, 2, 3]
>>> print range(-1,3)
[-1, 0, 1, 2]
>>> print range(5)
[0, 1, 2, 3, 4]
>>> print range(1,10,2)
[1, 3, 5, 7, 9]
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
13
for-Schleife
Python-Variante:
>>> for count in range(500):
print "I will not throw paper airplanes in class."
I
I
I
I
I
…
will
will
will
will
will
not
not
not
not
not
throw
throw
throw
throw
throw
paper
paper
paper
paper
paper
airplanes
airplanes
airplanes
airplanes
airplanes
in
in
in
in
in
class.
class.
class.
class.
class.
Verwendung von for mit range(): "Zählschleife"
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
While-Schleifen
„
Zweite Art der Schleifenprogrammierung in Python (neben- for)
Format
„
Beispiel: Fibonacci-Zahlen < 100
„
while Bedingung:
Anweisungen
B
nein
ja
>>> a, b = 0, 1
>>> while b < 100:
print b,
a, b = b, a+b
A
1 1 2 3 5 8 13 21 34 55 89
>>>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
14
While-Schleife:
Bsp. Quadratwurzel mit Newton-Methode
„
Newton-Methode: In Mathematik Standardverfahren zur numerischen Lösung von
nichtlinearen Gleichungen
Idee: Nullstelle der Tangente als verbesserte Näherung der Nullstelle der Funktion
zu verwenden.
Iterative Näherung der Nullstellen von f d.h. f(x) = 0
für beliebige Funktionen: xn+1 = xn – f(xn) /f'(xn)
„
z.B. Quadratwurzel von a:
„
„
„
‰
‰
‰
Iteration beenden wenn | xn+1 - xn | < ε
f(x) = x2 - a
Æ xn+1 = (xn + a / xn ) / 2
>>> a = x = 2.0
>>> while abs(x-a/x) > 0.00000001:
x = (x+a/x) / 2.0
print x
1.5
1.41666666667
1.41421568627
1.41421356237
Prof. B. Jung
Quelle: Wikipedia
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
While-Schleife:
Bsp. Quadratwurzel mit Newton-Methode
>>> a = x = 15.0
>>> while abs(x-a/x) > 0.00000001:
x = (x+a/x) / 2.0
>>> a = x = 144.0
print x
>>> while abs(x-a/x) > 0.00000001:
x = (x+a/x) / 2.0
8.0
print x
4.9375
3.98773734177
72.5
3.87463446793
37.2431034483
3.87298369801
20.5547955554
3.87298334621
13.7802299906
12.1149915067
12.0005457307
12.0000000124
Beobachtung: Anzahl der Iterationen
12.0
nicht von vorne hinein klar,
i.Ggs. etwa zur Zählschleife
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
15
Schleifen in Python
B
„
In Python 2 Arten von Schleifen:
‰
„
„
for und while (abweisende Schleife)
In anderen Programmiersprachen oft dritte
Variante: do .. while (nicht abweisende
Schleife)
eigentlich würde nur eine Art der Schleife
genügen!
‰
nein
ja
A
abweisende Schleife
z.B. for durch while ersetzt:
A
>>> i = 0
>>> while i < 500:
print "I will not throw",
print "paper airplanes in class."
i += 1
I will not throw paper airplanes in class.
I will not throw paper airplanes in class.
I will not throw paper airplanes in class.
… Prof. B. Jung
Einführung in die Informatik, WS 2007/08
ja
B
nein
nicht abweisende Schleife
TU Bergakademie Freiberg
Endlosschleifen
>>> while True:
print "endlos",
„
„
In meisten Fällen nicht
erwünscht
Abbruch:
‰
‰
Konsolen-Fenster schließen,
oder
Tastenkombination
Strg + c
„
Bem: Manchmal sind
Endlosschleifen durchaus
erwünscht
‰
z.B. "main loop" in
graphischen
Benutzerschnittstellen
Prof. B. Jung
endlos endlos endlos endlos
endlos endlos endlos endlos
endlos endlos endlos …
>>> while i != 0:
i = i - 0.2
print i,
0.8 0.6 0.4 0.2
5.55111512313e-017 -0.2 -0.4
-0.6 -0.8 -1.0 -1.2 -1.4 …
ungewollte Endlosschleife verursacht durch
mangelnde Genauigkeit von Gleitkommazahlen
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
16
Herunterladen