Experimente mit der Datenverwaltung

Lokale und globale Variablen

Wir betrachten ein verkürztes Programm zur Verschlüsselung mit einer Zuordnungstabelle.

Programm 1:

def verschluesselterText(klartext, schluessel):
    geheimtext = ''
    for zeichen in klartext:
        nummer = ord(zeichen)-ord('A')
        neuesZeichen = schluessel[nummer]
        geheimtext = geheimtext + neuesZeichen
    klartext = ''
    print()
    print('lokale Variablen:')
    print(locals())
    print('globale Variablen:')
    print(globals())
    return geheimtext

# Testprogramm

zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
aktuellerKlartext = 'OBELIX'
geheimtext = None
aktuellerGeheimtext = verschluesselterText(aktuellerKlartext, zuordnung)
print()
print(aktuellerKlartext)
print(aktuellerGeheimtext)
print()
print('globale Variablen:')
print(globals())

Beachte, dass hier mit print(locals()) und print(globals()) zusätzliche Ausgabeanweisungen eingefügt sind.

Aufgabe 1

Führe das Programm aus. Kannst du anhand der ausgegebenen Daten erschließen, was die Hilfsoperatoren locals() und globals() als Ergebnisse zurückliefern?

Namenskonflikte

Darf man Variablen zur Verwaltung von Daten genauso benennen wie Parameter zur Verwaltung übergebener Daten?

Programm 2:

def verschluesselterText(klartext, schluessel):
    geheimtext = ''
    for zeichen in klartext:
        nummer = ord(zeichen)-ord('A')
        neuesZeichen = schluessel[nummer]
        geheimtext = geheimtext + neuesZeichen
    klartext = ''
    print()
    print('lokale Variablen:')
    print(locals())
    print('globale Variablen:')
    print(globals())
    return geheimtext

# Testprogramm

schluessel = 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
klartext = 'OBELIX'
geheimtext = None
geheimtext = verschluesselterText(klartext, schluessel)
print()
print(klartext)
print(geheimtext)
print()
print('globale Variablen:')
print(globals())

Beachte, dass hier die Parameter der Funktion verschluesselterText dieselben Namen haben wie die Variablen im Tesprogramm zur Verwaltung der aktuellen Daten.

Aufgabe 2

Führe das Programm aus. Welche Schlüsse kannst du anhand der ausgegebenen Daten ziehen?

Seiteneffekte

Das folgende Programm benutzt eine Prozedur (Funktion ohne Rückgabe) zur Erzeugung des Geheimtextes.

Programm 3:

def textVerschluesseln():
    global zuordnung
    global geheimtext
    global klartext
    geheimtext = ''
    for zeichen in klartext:
        nummer = ord(zeichen)-ord('A')
        neuesZeichen = zuordnung[nummer]
        geheimtext = geheimtext + neuesZeichen
    klartext = ''
    print()
    print('lokale Variablen:')
    print(locals())
    print('globale Variablen:')
    print(globals())

# Testprogramm

zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
klartext = 'OBELIX'
geheimtext = None
textVerschluesseln()
print()
print(klartext)
print(geheimtext)
print()
print('globale Variablen:')
print(globals())

Aufgabe 3

Führe das Programm aus. Was bewirken Anweisungen wie global geheimtext? Warum funktioniert die Datenverarbeitung mit einer Funktion ohne Rückgabe hier?

Verwendung globaler Variablen

Wir lassen jetzt Schritt für Schritt die Anweisungen global ... weg, indem wir sie auskommentieren.

Programm 4:

def textVerschluesseln():
    #global zuordnung
    global geheimtext
    global klartext
    geheimtext = ''
    for zeichen in klartext:
        nummer = ord(zeichen)-ord('A')
        neuesZeichen = zuordnung[nummer]
        geheimtext = geheimtext + neuesZeichen
    klartext = ''
    print()
    print('lokale Variablen:')
    print(locals())
    print('globale Variablen:')
    print(globals())

# Testprogramm

zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
klartext = 'OBELIX'
geheimtext = None
textVerschluesseln()
print()
print(klartext)
print(geheimtext)
print()
print('globale Variablen:')
print(globals())

Aufgabe 4

Führe die modifizierten Programme aus. Was stellst du fest? Hast du eine Erklärung hierfür?

X

Fehler melden

X

Suche