Informatik-AG Klasse 11

Werbung
SFZ FN
Sj. 13/14
Python
Grundlagen
1
InfK12 Sj 13/14
GZG FN W.Seyboldt
Start von EcPy / Doku

Doku im Internet: w2.gzg-fn.de/info
–
–


2
Download von EcPy (steht auch in P:\Freigabe\Informatik)
Python Lösungen – die Programme in den Moduln *_loes,
im Internet src.zip,
am GZG in P:\Freigabe\sey\inf\src zum direkten Kopieren
in Ecpy
In P:\Freigabe\Sey\Inf stehen ebenfalls die
Unterlagen.
Die wichtigsten Grundlagen zu Python stehen in
aa_PythonInfos_Grundlagen.doc
InfK12 Sj 13/14
GZG FN W.Seyboldt
Grundlegende Elemente






3
In Python müssen Variable nicht deklariert werden – im
Gegensatz zu den meisten Programmier-sprachen. Sie
werden beim ersten Zuweisen angelegt.
Aber bei Variablen das Zuweisen nicht vergessen: Im
Speicherplatz der linken Seite einer „Gleichung“ wird das
abgespeichert, was mit der rechten Seite berechnet wird.
Man unterscheidet zwischen Strings, Int (beliebig große
Zahlen und float-Variablen (endliche Genauigkeit – sonst
Decimals
int(2.33)# liefert 2
float(3)# liefert 3.0
str(53)#liefert die Zahl 53 als Zeichenkette
InfK12 Sj 13/14
GZG FN W.Seyboldt
Listen




4
Listen sind eine sehr flexible Variante, viele Variable
zu verketten (Array)
L = [1,7,“sieben“,[9,4]]
fo=[a,b];
i=2
while i<bis:
i+=1
if i%2==1: c=a+b ;
else: c=float(b)/a
fo.append(c) ; a,b=b,c
L = [x * 3 for x in range(4)]
L1 = L[3:-1] #Von 3 bis vors letzte El.
InfK12 Sj 13/14
GZG FN W.Seyboldt
Schleifen
–
sum=0
for i in range(1,27):
sum+=i*i
–
# Liste in umgekehrter Richtung abarbeiten.
for i in reversed(range(1,4)): # oder reversed(list),
print i
–
# Auf Nr und Element gleichzeitig zugreifen
for nr,el in enumerate(liste):
print i,j
–
sum=0
i=1
while sum<1000:
sum+=i*i
i+=1
–
–
–
5
while b!=0:
r=a%b
a,b=b,r
break
# beendet die Schleife
continue
# beendet >nächste Schleife
InfK12 Sj 13/14
GZG FN W.Seyboldt
Bedingungen
6
–
if i>30: s=i*i
elif i>20: s=i*i*i
else: s=i*i*i*i
–
if a>b: # sorge dafür, dass a<b ist.
a,b=b,a
–
if betrag(a-x*x)<genauigkeit: return x
InfK12 Sj 13/14
GZG FN W.Seyboldt
Funktionen




7
def f(x):
return 3*x*x+3*x-2
def note(punkte):
if punkte > 23: return 15
if punkte > 19: return 13
…
def fakultaet(n):
if n==1: return 1
return n*fakultaet(n-1)
def fakultaet(n):
erg=1
for i in range(2,n): erg*=i
return erg*n
InfK12 Sj 13/14
GZG FN W.Seyboldt
Element am Beginn einer Liste


Die Methode li.append(el) fügt in einer Liste li das
neue Element hinten bei der Liste dazu.
Programmiere eine Methode vorne(el, liste), die ein
Element an der ersten Stelle der Liste einfügt.
def vorne(el, liste):
if len(liste)==0: return [el]
li=[0 for i in range(len(liste)+1)]
for i in range(len(liste)):
li[i+1]=liste[i]
li[0]=el
return li
8
InfK12 Sj 13/14
GZG FN W.Seyboldt
Geschachtelte Schleifen

Berechne alle pythagoräischen Zahlen, d.h. alle
Zahlentripel (a,b,c) mit a2+b2=c2
def pythagoraeischeZahlen(n):
pyZahlen=[]
for a in range(1,n):
for b in range(a,n):
c_square = a**2 + b**2
c = int(sqrt(c_square))
if ((c_square - c**2) == 0):
pyZahlen.append([a, b, c])
return pyZahlen
9
InfK12 Sj 13/14
GZG FN W.Seyboldt
Nullstellenverfahren



10
Ist f stetig (d.h. f hat keine Sprungstellen, dies ist
normalerweise in der Schule erfüllt)
und f(a)*f(b)<0,
dann gibt es im Intervall [a,b] mindestens eine
Nullstelle.
Intervallschachtelung: Wähle iterativ die
Intervallhälfte, für die das Produkt der
Funktionswerte an den Grenzen kleiner Null ist.
Newtonverfahren: Ersetze die Funktion durch eine
lineare Funktion, die die Steigung der Funktion f im
Punkt a hat, der nahe der Nullstelle ist.
InfK12 Sj 13/14
GZG FN W.Seyboldt
Intervallschachtelung
while abs(b-a)>eps:
m=(a+b)/2
iterationenAnz+=1
if f(m)==0: # Nullstelle gefunden
break
elif f(a)*f(m)<0:
b=m
else:
a=m
if iterationenAnz>200: # Abbruch
iterationenAnz=-2 ; break
return m,iterationenAnz
11
InfK12 Sj 13/14
GZG FN W.Seyboldt
Newtonverfahren
while abs(a-aAlt)>eps:
an=a-f(a)/fs(f,a) # die neue Näherung
aAlt=a
a=an
iterationen+=1
if iterationen>50: # Abbruch
iterationen=0
break
12
InfK12 Sj 13/14
GZG FN W.Seyboldt
Herunterladen