Apr 272012
 

Heute haben wir uns im Informatik-Fachseminar mit dem Thema Kryptologie in der Sek1 (9. oder 10.Klasse) und einer Umsetzung mit der Programmiersprache Python beschäftigt.

Ziel war heute, ein Programm zur Verschlüsselung von Zeichenketten zu erstellen, das problemorientiert und nicht künstlich nur zum Üben geeignet ist. Als Ansatz nahmen wir eine einfache Verschlüsselung an, die einzelne Zeichen vertauscht, z.B. das erste gegen das dritte, das zweite stehenlässt, das vierte gegen das sechste tauscht usw.
Hierzu gab es einen Vorschlag, der folgendermaßen aussieht:

def drilling(eingabe):
    zaehler = 0
    laenge = len(eingabe)
    ausgabe = ""
    while zaehler < laenge:
        if zaehler % 3 == 0:
            if zaehler+2 < laenge:
                ausgabe = ausgabe + eingabe[zaehler+2]
            else:
                ausgabe = ausgabe + eingabe[zaehler]
        if zaehler % 3 == 1:
            ausgabe = ausgabe + eingabe[zaehler]
        if zaehler % 3 == 2:
            ausgabe = ausgabe + eingabe[zaehler-2]
        zaehler += 1
    print ausgabe     

eingabe = raw_input("Bitte ein Wort eingeben:")
drilling(eingabe)

Wir diskutierten kleinschrittigeres Vorgehen, erst nur ein Tripel vertauschen, um nicht gleich Schleifen und Fallunterscheidungen als Konzepte mit einbeziehen zu müssen. Beispielsweise könnte erst nur der Vertauschvorgang auf Papier modelliert werden, also erst nur Zeichenketten der Länge 3, dann im zweiten Schritt dieses auf Zeichenketten der Länge eines Vielfachen von 3 erweitern und dann auf beliebige Zeichenketten.
Der erste Schritt wäre dann:

# Eine ganz einfache Variante der Drillingsverschluesselung
def drilling(eingabe):
    ausgabe = eingabe[2] + eingabe[1] + eingabe[0]
    print "Das Wort lautet " + eingabe 
    print "Der verschluesselte Text lautet " + ausgabe     

eingabe = raw_input("Bitte ein Wort der Laenge 3 eingeben:")
drilling(eingabe)

Den zweiten Schritt habe ich noch nicht so richtig durchdacht, wünschenswert wäre ein Programm, das weniger Konzepte enthält, aber mehr kann als das erste Programm, also z.B. alle durch 3 teilbaren Zeichenketten-Längen aber weniger Fallunterscheidungen und keine Modulo-Rechnung enthält.

Als weiteren Ansatz diskutierten wir, erst ein anspruchsvolles Programm zu einem Problem vorzulegen und dies analysieren lassen, um dann eine Modifikation oder Variante implementieren zu lassen. Dies könnte allerdings auch abschreckend wirken und zur Entwicklung eines Vokabulars erscheint ein systematischer Ausbau von Konzepten günstiger.

Ich habe noch nicht so viele Erfahrungen mit Python, daher habe ich mich erst einmal auch mit einfachen Aufgaben beschäftigt, z.B. wie eine Liste erstellt wird und was man damit alles machen kann. Dabei habe ich mich an einem Skript von Bernd Grave orientiert: www.uni-math.gwdg.de/bgr/unterricht/informatik/EinfPython.pdf Problemorientiert sind diese Aufgaben allerdings nicht, da es völlig unsinnig erscheint, eine Einkaufsliste mit einem solchen Aufwand zu verwalten. Zum Konzepte von Python kennenlernen ist es allerdings recht schön.

Mein erstes Experiment mit Ausgaben und Fallunterscheidungen (Ich nutze Ubuntu, da ist Python bereits vorinstalliert und als Editor einfach gedit und rufe die Programme dann über die Konsole auf):

Hier meine Listen-Experimente:

# Programm "Listen", angelehnt an Bernd Grave, 
# "Programmieren mit Python - erste Schritte"

# Erzeuge eine Liste und gebe ein Listenelement aus

planeten = ['Sonne','Mond','Sterne']

nummern = range(10)
print 'Listenelemente ausgeben'
print planeten [1]
print nummern [3]

# S.11 "Benutzung von Listen"

einkaufsliste = ['Aepfel','Mangos','Karotten','Bananen']

# Laenge einer Liste ausgeben
print '\n Ich habe', len(einkaufsliste), 'Dinge einzukaufen.'

# Elemente einer Liste ausgeben (interessant ist hier, dass eine 
# Variable "ding" für die Listenelemente erst in der for-Schleife 
# erzeugt wird, ohne näher deklariert zu werden)
print 'Diese Dinge sind:',
for ding in einkaufsliste:
print ding,

# Ein Elemente der Liste hinzufuegen
print '\n ich muss auch Reis einkaufen'
einkaufsliste.append('Reis')
print 'Meine Einkaufsliste ist jetzt', str(einkaufsliste)

# Eine Liste sortieren
print 'Jetzt werde ich meine Einkaufsliste sortieren.'
einkaufsliste.sort()
print 'Die sortierte Einkaufsliste ist', einkaufsliste

Die Ausgabe dieses kleinen Programms auf der Konsole sieht dann folgendermaßen aus:
 

Nov 072011
 

Diesmal schon mit Funktion, die ich allerdings in der Form erstmal aus einem Skript übertragen habe.

Wie nun die Auswertung von Funktionen im Terminal aussehen soll, hab ich noch nicht ganz verstanden, also wenn ich direkt Python starte und das Programm Python-Test übergebe, dann kann ich die Funktion nicht direkt im Terminal aufrufen. Ich arbeite nicht so viel mit dem Terminal, vielleicht lese ich dazu nochmal mehr. Das ist die Fehlermeldung:

python python-test testeZahl(0)
bash: Syntaxfehler beim unerwarteten Wort `(‚

Nov 072011
 

Nachdem wir im Fachseminar letzte Woche über Python gesprochen haben und ich noch keine Erfahrung mit der Sprache machen konnte, habe ich gerade einige sehr simple Schritte in meinem Terminal kennengelernt, nachdem ich ein kleines Youtube-Tutorial angeschaut habe. Zum Referendariat allgemein habe ich einen Artikel in Arbeit, der ist gerade aber noch nicht fertig und kommt später 🙂

Hier meine ersten kleinen Schritte mit Python: