InfK1_1314a_PythonGrundlagen

Werbung
SFZ FN
Sj. 13/14
Python 1
Grundlagen
1
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Python




Die Sprache wurde Anfang der 1990er Jahre von Guido van Rossum in
Amsterdam als Nachfolger für die Programmier-Lehrsprache ABC
entwickelt.
Version 1: 1994
Sie wird an Unis häufig in Naturwissenschaften verwendet,
aber auch z.B. bei Google
Rossum war und ist begeistert von Monty Python’s Flying Circus.
Literatur:
–
–
–
–
–
2
On-Line Kurs Bundeswettbewerb Informatik
http://cscircles.cemc.uwaterloo.ca/using-website-de/
Hello Words: Programmieren für Kids und andere
es ist einfach zu lesen.
A Byte of Python http://abop-german.berlios.de/
engl. Original: http://www.swaroopch.com/notes/Python
Kaiser, Ernesti: Python Handbuch, Vers.2.5 http://openbook.galileocomputing.de/python/
A Primer on Scientific Programming
sehr gut, aber anspruchsvoller
http://ebooksplanet.net/others/5259-a-primer-on-scientificprogramming-with-python-2nd-edition.html
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Informatikwettbewerb




3
Seit Jahren gibt es den Informatik-Wettbewerb
http://www.bundeswettbewerb-informatik.de/
Auf dieser Seite wird seit Sept 2013 ein Kurs Python
angeboten.
http://www.bundeswettbewerbinformatik.de/index.php?id=644&tx_ttnews[tt_news]=
229&cHash=26d80562dbd7960019acc5fdc3f3b431
Wir registrieren uns dort:
http://cscircles.cemc.uwaterloo.ca/using-website-de/
Guru: seyboldt
Erste HA: Bearbeite Kapitel 0,1,2
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Python mit der IDE Eclipse
 Start





4
von EcPy
EcPy = Python mit Eclipse portable
Kopiere es von P:\Freigabe\PoProgs\Informatik nach
H:\ und auf den Stick
Klicke auf StarteEcPy in EcPy.
Wähle als Workstation den vorgeschlagenen Ort.
Erstelle einen Projekt PyK01 (>File>new >PyDev
Projekt >Gib den Namen PyK01 ein >Finish)
Gehe beim Projekt PyK01 zu scr, klicke mit der rM
auf scr und >PyDev Package >Wähle den Namen A
>finish
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Modul = Programm A_eins.py


Ein Python-Programm heißt auch Modul:
klicke mit rM auf das Package A >new >Pydev Modul und gib
a_eins ein
Unterschied zur Shell
–
–


5
Eine Programmzeile wird nicht ausgeführt, wenn man die Returntaste
drückt, sondern erst, wenn man das Programm mit
startet. Die
Ausgabe erfolgt im mittleren Fenster unten.
Man erstellt Programme mit vielen Zeilen, die beim Starten alle
ausgeführt werden (und erst dann!)
Steht in einer Zeile z.B. 3+4 so wird nicht 7 wie in der Shell angezeigt,
sondern nichts.
Man muss stattdessen print 3+4 eingeben und dann das Programm
mit
starten
Schreibe den Code von a_eins.py (in PyK01_Loes/src) ab.
Starte den Moduls mit einem Klick auf
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Variablen


Variable sind Speicherplätze oder Notizzettel
Wir unterscheiden zwischen
–
–
–
–

Ganzen Zahlen – int() - integer
Reellen Zahlen – float() – floating point
Zeichenketten – str() – strings
und anderen (später)
In der Variablen x speichert man mit x=3.5 einen Wert ab –
oder mit s = “Das ist ein Text“
Wenn man eine Variable das erst Mal benennt, wird der Speicherplatz
erzeugt und mit dem Wert auf der rechten Seite des Gleichheitszeichens
belegt.

MERKE: Das Gleichheitszeichen ist ein Zuweisungsoperator
–
–
6
links steht die Variable
rechts steht ein Rechenausdruck, dessen Ergebnis in der Variable
abgespeichert wird.
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Anzeigen von Variablen




7
print var1
Oder
cf=11.0
d=3
q=cf/d
print " Es ist %0.2f, durch %i = %1.4f" %(cf,d,q)
Steht in einem String %i, %2.5f oder %s, so muss nach dem
String ohne Komma ein %(..) folgen, in dem die Variablen in
der Reihenfolge stehen, wie sie im String als %... referenziert
stehen.
%s = String
%i = Ganze Zahl (int)
%10.6f = Dezimal Zahl (float) mit mindestens 10 Ziffern
insgesamt und höchstens 6 Nachkommastellen.
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Eingabe

Will man Daten während des Programms über die
Tastatur eingeben, geht dies am einfachsten mit
raw_input(„Info: "), siehe b_Eingabe.py

Oder mit EasyGUI (und vielen anderen GUI-Tools,
GUI = Graphical User Interface)
siehe b_Eingabe2Fenster.py
Oder http://easygui.sourceforge.net/tutorial/
8
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Bedingung if, c_if.py

Programme sollen je nach Eingabe (oder Zustand bestimmter Daten)
verschiedene Dinge tun.
if x<y:
min=x
print („Bedingung x<y erfüllt")
elif x==y:
# == ist das mathematische Gleichheitszeichen
min=x
# = ist der Zuweisungsoperator
print („Bedingung x=y erfüllt")
else:
min=y
print („Bedingungen x<y und y==x falsch")
print min





9
Aufgabe: Erstelle ein Programm, das abhängig von der Note ein Lob
oder einen Tadel ausspricht.
Vergleichoperatoren: ==, >,>=,<,<=, != (siehe S. 73)
Zwei Bedingungen sollen gleichzeitig gelten: and
Es soll mindestens eine Bedingung gelten: or
Negation der Bedigung: not
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
For-Schleife, d_for.py

for i in liste:
a=a+i
Die Liste kann man auf verschiedene Arten
bestimmen:
–
–
[1,2,5,8,9]
range(a,b):
Alle ganzen Zahlen von a bis unter b (also ohne b!)
–
range(b):
Alle ganzen Zahlen von 0 bis unter b (also ohne b!)
–
range(a,b,d):
Alle ganzen Zahlen beginnend mit a, a+d, a+2d, …
bis unter b (b ist nicht mehr dabei)
–
[“str2“, “str2“]:
Die Liste kann auch Strings (oder andere Listen)
als Elemente enthalten

10
continue: macht beim nächsten Durchgang
weiter,
break: Beendet die Schleife
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Schleifen



Muss man immer wieder dasselbe in leichten Variationen berechnen, so
wendet man sinnvollerweise das Konstrukt Schleife an.
89
Ziel: Berechne
s   6  k3  5 k 
k 8
Neuer Modul d_Schleifen
def bsp(a,b):
s=0
for k in range(a,b+1):
s=s+6*k*k*i+5*sqrt(k)
return s
print bsp(8,89)

for in in range(a,b,n): alle ganzen Zahlen von a (einschließlich)
bis b (ausschließlich, mit der Schrittweite d.

Aufgaben:
–
–
–
11
Berechne die Summe der Zahlen von 1 bis 100 000
Berechne die Summe der Quadratzahlen von 500 bis 2 000 000
(Hierzu benötigt der Pc ein paar Sekunden Zeit!)
Berechne die 500! (500 Fakultät
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Methoden / f_parabel.py


In der Mathematik hat sich das Objekt Funktion bewert.
Im einfachsten Fall ist eine Funktion ein Algorithmus, der
jeder Eingabezahl x einen Funktionswert y zuordnet.
Das kann man in Python einfach programmieren.
def parabel(x):
y=3*x*x-0.2*x-3
return y
x=3.2
y=parabel(x)
print "x=", x, " // y=", y
Siehe f_parabel.py
12
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Graph: g_FunktionenPlotSWGui.py




13
Eine Parabel zeichnen
g_FunktionenPlotSWGui.py
Version mit sich bewegenden Kreis:
g_FunktionenPlotSWGui2.py
Zwei Funktionen
siehe g_FunktionenPlotSWGui3.py
Später (- oder besser: Jemand heute, der viel mit
Graphen arbeit -) verwendet man vor allem die
Methoden von matplotlib,
siehe h_plot01_zweiFkten.py
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Weiter – oder noch was üben?


14
Falls Du noch etwas üben möchtest, oder noch ein
paar Ergänzung kennen lernen, gehe zu den
nächsten Folien
Ansonsten gehe zu Folie 18
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Mitternachtsformel, c_MNF

Die Gleichung ax  bx  c  0
2
hat die Lösungen x1/ 2
b  b2  4ac

2a
from math import sqrt # Damit man die Wurzel benutzen kann.
#Eingabe der drei Koeffizienten
a,b,c =…
diskriminante=b*b-4*a*c
if diskriminante<0:
print "Die Gleichung hat keine reelle Lösung"
elif diskriminante==0:
print "Die einzige Lösung ist %.4f" %(-b/2/a)
else:
x1=(-b+sqrt(diskriminante))/2/a
x2=(-b-sqrt(diskriminante))/2/a
print "Die Gleichung hat zwei Lösungen, nämlich\n\
x1=%.3f und x2=%.3f" %(x1,x2)
15
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Weitere Aufgaben




k_SumN.py: Addiere die ersten n Quadratzahlen
k_HarmonN.py: Bestimme 1+1/2+1/3+1/4 … für große n
Vorsicht: 1/n=0, falls n>1 und n ganze Zahl, … float(n) …
k_PiNaeherungN.py: Bestimme 1-1/3+1/5-1/7+-…. Für große n
Bem.: Die Folge p(n) = 1-1/3+1/5-1/7+..+(-1)^(n-1)*1/(2n-1)
ist für große n fast π/4
Frage: Wie könnte man einen alternierenden Vorzeichenwechsel
programmieren?
k_Folge3aP1.py: Die 3a+1-Folge bestimmt sich folgendermaßen:
Ist an gerade, so ist an+1=an/2, sonst 3*an+1.
Bem.: Bisher führten alle Folgen schließlich zur Zahl 1, allerdings ist bis heute nicht
bekannt, ob wirklich alle Folgen bei 1 enden. (siehe Collatz-Problem bei Wiki)
If (i%2)==0:
Wenn i bei der Division durch 2 den Rest 0 hat, ist sie gerade.

k_FizzBuzz.py: FizzBuzz ist ein Spiel aus Frankreich.
–
–
–
16
Schüler müssen reihum eins addieren.
Wenn die Zahl ein Vielfaches von 5 ist, müssen sie statt der Zahl Fizz sagen,
wenn die Zahl ein Vielfaches von 7 ist, Buzz.
Damit die Sache aber nicht zu einfach ist, müssen sie bei einer Zahl, die
sowohl ein Vielfaches von 5 als auch von 7 ist, FizzBuzz sagen
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Würfeln

Wuerfeln1.py:
Würfle 10 mal und zeige die Augenzahlen an:
from random import *
random() Zahl x mit 0<=x<1
Wurf=int(random()*6+1)
# liefert die Wurfzahlen.

Wuerfeln2.py:
Würfle zweimal und bilde die Augensumme. Wie groß sind
die relativen Häufigkeiten der möglichen Augensummen bei
100000 Würfen?
Listen erzeugen:
liste=[3*i+4 for i in range(34)] oder
H=list(0 for i in range(13))
17
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Funktionen = Methoden



Wenn Programme größer werden, muss man sie gliedern –
so wie man Bücher in Kapitel einteilt.
Funktionen (Codebausteine) > Objekte (abgeschlossene
Einheiten) > Moduln (eigenständige Dateien)
Eine einfache Funktion, siehe wuerfeln01.py:
def wuerfle():
zz=random()
wurf=int(zz*6+1)
return wurf



18
Aufruf: wurf=wuerfle()
Aufgabe: Schreibe ein Programm wuerfeln02.py, das eine
Methode wuerfle2() enthält, die zweimal würfelt und die
Augensumme zurückgibt.
Globale Variable <-> lokale Variable
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Aufgaben Funktionen






Aufgabe 1: Schreibe ein Programm wuerfelnFunc1, das mit einer
Methode wuerfle() 30 mal würfelt
Aufgabe 2: Schreibe ein Programm wuerfelnFunc2, das mit einer
Methode wuerfle() 60 000 mal würfelt und anschließend anzeigt, wie oft
ein Wurf geworfen wurde.
Aufgabe 3: Schreibe ein Programm wuerfelnFunc3, das mit einer
Funktion wuerfle2() 100 000 mal mit zwei Würfeln würfelt und
anschließend anzeigt, wie groß die relative Häufigkeit der Augenzahlen
ist.
Aufgabe 3: Schreibe ein Programm wuerfleSechs, das 7 000 mal so
lange würfelt, bis eine Sechs geworfen wurde. Welcher Mittelwert ergibt
sich dabei? Wie sieht die Verteilung aus?
Aufgabe 4: Lese Sande Kap 13, S. 137-152
Aufgabe 5: Mwst.py: Erstelle ein Programm, das die Mehrwertsteuer
berechnet und den Gesamtwert zurückgibt
J etzt is t eine
P a us e nötig !
19
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Primzahlen

SiebDesEratosthenes.py:
Bestimme mit dem Sieb des Eratosthenes alle Primzahlen bis
zu einer eingegebenen Zahl

Programm: Primzahlen01.py:
–
–
–
–

20
Schreibe alle Zahlen bis n auf ein Blatt.
Streiche alle 2er-Zahlen
Streiche alle 3er-Zahlen
Gehe einfach weiter und streiche alle Mehrfache der Zahlen, die noch
nicht gestrichen sind
Erstelle ein Programm Primzahlen01.py, das die Primzahlen
bis zu einer einzugebenden Zahl berechnet. Schreibe dazu
eine Methode.
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Literatur zu Python











21
Offizielle Doku: http://www.python.org/doc/
Python Homepage http://www.python.org/
Python-wiki
http://wiki.python.org/moin/GermanLanguage
Python-Kurs http://www.python-kurs.eu/kurs.php
Python-Kurs http://www.wspiegel.de/pykurs/kurs_index.htm
Kurze Zus.: http://www.thomasguettler.de/vortraege/python/einfuehrung.html
How to Think like a Computer Scientist
http://openbookproject.net/thinkcs/python/english2e
[Old] Reinhard Oldenburg: Mathematische Algorithmen im Unterricht,
Teubner 2011
[PyTut] Das offizielle Python-Tutorial, siehe
http://docs.python.org/2/tutorial/
[SymPy] Symbolisch rechnen mit Python, siehe
http://docs.sympy.org/dev/tutorial/tutorial.de.html
IDE Pydev http://pydev.org/
Inf K1/2 Sj 13/14
GZG FN W.Seyboldt
Herunterladen