Erster Block

Werbung
https://www.python.org//
python
Eine kurze Einführung
Überblick
•
•
•
•
•
Wie geht programmieren ?
•
Beispiel: Turtle-Grafik
python als Programmiersprache
Grundelemente von Programmen
•
Schleifen,Verzweigungen, Funktionen
Alternativen
•
ruby, scala, groovy
Mini-Projekt
Turtle Grafik
Turtle Grafik
Was kann die Turtle ?
go(pixel), turn(grad), pen_up(), pen_down(), color("#rrggbb")
Aufgaben
Schleifen
for i in range(6):
go(60)
turn(60)
for Schleife wird für jedes Element einer
wasauchimmer einmal ausgeführt
>>> for i in [1,2,3]:
...
print(2*i)
...
2
4
6
>>>
>>> for c in "Hallo":
...
print(c)
...
H
a
l
l
o
Aufgaben
Verzweigungen
Verzweigung führt Anweisung(en)
abhängig von einer Bedingung aus
pen_up() hebt den Stift an,
pen_down() setzt ihn wieder auf
>>> for i in range(4):
...
print(i % 2)
...
0
1
0
1
>>> for i in range(4):
...
if (i % 2 == 0):
...
print("gerade")
...
else:
...
print("ungerade")
...
gerade
ungerade
gerade
ungerade
L-Systeme
def farn(len):
if (len > 2):
go(len)
turn(25)
farn(len * 0.5)
turn(-35)
farn(len * 0.7)
turn(-25)
farn(len * 0.4)
turn( 35)
go(-len)
else:
go( len)
go(-len)
width(1)
farn(200)
https://de.wikipedia.org/wiki/Lindenmayer-System
http://www.kevs3d.co.uk/dev/lsystems/
The real thing …
https://www.python.org/downloads/
Vertiefung
http://hetland.org/writing/instant-hacking.html
Aufgaben
*
***
*****
*******
*********
***********
• Gib ein Dreieck aus Sternchen aus
• Gib die Anzahl der Wörter und Buchstaben in einem
String aus
python
• 1991 entstanden, Guido van Rossum
• REPL
• mächtige Datentypen (Listen usw.)
• Multi-Paradigmen-Sprache
• dynamische Typisierung
• plattformunabhängig
dynamische, strenge Typisierung
>>> i = "Hallo" # Ein String
>>> i
'Hallo'
>>> type(i)
<type 'str'>
>>> i = 1 # Eine Zahl
>>> i
1
>>> type(i)
<type 'int'>
>>> print("Hallo" + i)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
>>> str(i)
'1'
>>> print("Hallo" + str(i))
Hallo1
>>> "Hallo %d" % i
'Hallo 1'
Variablen
>>> i = 1
>>> i
1
# Werden durch Zuweisung erzeugt
>>> # CamelCase unüblich
>>> ein_langer_name_ist_schoen = 1
>>> ein_langer_name_ist_schoen
1
>>> s = "Hallo"
>>> s
‚Hallo'
# Ein String
>>> s.upper()
‚HALLO'
>>> len(s)
5
>>> t = 'Welt'
>>> t
‚Welt'
>>> s + t
'HalloWelt'
# Noch ein String
# Verkettung von Strings
Verzweigungen
>>> i = 7
>>> i
7
# Eine (ungerade) Zahl
>>> if (i % 2 == 0):
print("gerade")
else:
print("ungerade")
ungerade
# Blöcke werden durch Einrückung definiert, vergleiche Java
if (i % 2 == 0) {
System.out.println(„gerade");
}
# mehrere Wege ?
i = 5
>>> if (i > 10):
...
print("Groesser zehn")
... elif (i > 4):
...
print("Groesser vier")
... else:
...
print("Groesser null")
...
Groesser vier
Vergleichsoperatoren
>>> i = 3
>>> if (i > 0):
...
print("Treffer")
...
Treffer
>>> if (i >= 3):
...
print("Treffer")
...
Treffer
>>> if (i != 5):
...
print("Treffer")
...
Treffer
>>> if ((i > 0) and (i < 10)):
...
print("Treffer")
...
Treffer
Die „üblichen Verdächtigen“:
< > >=
<=
Kombination mehrerer Bedingungen mit: and
or
!=
not
Listen
>>> a = [1,2,"Hallo"]
>>> a
[1, 2, 'Hallo']
>>> len(a)
3
>>> a[0]
1
>>> a[2]
'Hallo'
>>> a[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> a.append("Welt")
>>> a
[1, 2, 'Hallo', 'Welt']
>>> a.pop()
'Welt'
>>> a
[1, 2, ‚Hallo']
>>> a.reverse()
>>> a
['Hallo', 2, 1]
Iterationen
>>> for i in range(5):
...
print(i)
...
0
1
usw.
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> while True:
...
print("python ist toll“)
???
>>> i=5
>>> while (i>0):
...
print i
...
i=i-1
...
5
4
3
2
1
STOP
Back to the Praxis
>>>
Ich habe eine Nummer zwischen 1 und 20 gezogen, versuche, sie herauszufinden
Dein Tip: 10
zu gross
Dein Tip: 5
zu klein
Dein Tip: 7
zu gross
Dein Tip: 6
Glueckwunsch, Du hast 4 gebraucht
Programm „zieht Zahl“, Mensch versucht zu erraten, dazu:
from random import randint
num = randint(1,20)
print("Ich habe eine Nummer zwischen 1 und 20 gezogen, …")
guess = int(input("Dein Tip: "))
while (guess != num):
umgekehrt:
Suche Dir eine Nummer zwischen 1 und 20 raus <Enter>
Ist es 10 ? (r)ichtig/zu (k)lein/zu (g)ross g
Ist es 5 ? (r)ichtig/zu (k)lein/zu (g)ross k
Ist es 7 ? (r)ichtig/zu (k)lein/zu (g)ross r
Ich habe 3 Versuche gebraucht
Kennwörter
Kennwörtern überprüfen:
Tills-MacBook-Pro:python-examples till$ python3 pwd1.py
Kennwort eingeben hello
Kenwort richtig
Kennwort eingeben world
Kennwort falsch
Kennwörter 2
Mit Hash-Funktion
>>> def my_hash(s):
...
h = 0
...
base = 1
...
for c in s:
...
h += ord(c)*base
...
base *= 26
...
return h
...
>>>
>>> my_hash("me")
2735
Kennwörter
Qualität von Kennwörtern prüfen:
Kennwort eingeben hello
Das Kennwort ist zu kurz !
Muss mindestens drei aus (Kleinbuchstaben/Grossbuchstanden/Zahlen und
Sonderzeichen enthalten)
Bitte anderes Passwort wählen
Kennwörter 2
Kennwörter mit brute force knacken
>>> def my_hash(s):
...
h = 0
...
base = 1
...
for c in s:
...
h += ord(c)*base
...
base *= 26
...
return h
...
>>>
>>> my_hash("me")
2735
>>> test = 2735
>>> alphabet_lower = "abcdefghijklmnopqrstuvwxyz"
>>> for c in alphabet_lower:
…
Kennwörter 3
Erstellen Sie ein Programm, das "zufällige" Passwörter generiert. Der einfachste Ansatz wäre die
Erzeugung einer zufälligen Zeichenkombination. Sich diese zu merken, wäre allerdings schwierig.
Ein anderer Ansatz wäre eine zufällige Kombination von Silben. Wählen Sie aus einer Liste von
Silben mehrere zufällig aus und kombinieren Sie diese zu einem Kennwort.
Da nicht alle dieser "Wörter" leicht merkbar sind, erzeugen Sie eine Liste von 10 Kennwörtern, aus
denen der Anwender dann aussuchen kann.
Verbessern Sie die Qualität der Kennwörter dadurch, dass Sie zufällig einzelne Buchstaben durch
Großbuchstaben ersetzen.
Verbessern Sie die Qualität weiter, indem Sie einzelne Buchstaben durch Zahlen ersetzen und
Satzzeichen einfügen.
Die "Wörter" sind leichter aussprechbar, wenn bestimmte Regeln befolgt werden, dass etwa nicht
zwei Vokale aufeinander folgen. Stellen Sie Ihr Programm entsprechend um.
Vorgehen
• Liste von Silben anlegen
• Zufallszahl erzeugen
• Silbe zufällig auswählen
•…
Herunterladen