lehrkraefte:sbt:informatik:glf22:python:little-programming-tasks

Kleine Programmieraufgaben

  1. Schau dir den Verschlüsselungsalgorithmus an, der nach dem römischen Kaiser Caesar benannt ist Wikipedia: Caesar-Verschlüsselung.
  2. Schreibe ein kleines Programm, das nach dem Veschiebewert (Quelltext) fragt und dann in einer Endlosschleife Texte verschlüsselt. Die Endlosschleife wird mit einer leeren Eingabe beendet.

Zur Vereinfachung: Nutze nur kleine Buchstaben.

Hinweis1

Hinweis1

Satz = input('Quelltext: ')

Hinweis2

Hinweis2

while True:
    Eingabe = input('Quelltext: ')
    if len(Eingabe) == 0:
        break
print('fertig')

Hinweis3

Hinweis3

abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
       'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
 
shift = int(input("Offset: "))
 
while True:
    quelltext = input("Quelltext: ")
    if len(quelltext) == 0:
        break
    code = ""
    for buchstabe in quelltext:
        index = abc.index(buchstabe)
        indexCode = index + shift
        # if indexCode > len(abc) - 1:
        #     indexCode -= len(abc)
        indexCode = indexCode % len(abc)
        code += abc[indexCode]
    print(code)

Expertenaufgabe

Expertenaufgabe

  • Schreibe ein Verschlüsselungsprogramm, dass eine Quelltextdatei 'text.txt' einliest und als Datei 'text_encrypted.txt' auf die Festplatte schreibt.

Hinweis

Hinweis

EingabeDatei = open('text.txt','r')
AusgabeDatei = open('text_encrypted.txt','w')
for line in EingabeDatei.readlines():
    lineX = verschluessele(line)
    AusgabeDatei.write(lineX)
AusgabeDatei.close()
EingabeDatei.close()
  • Ergänze das Programm so, dass du nach dem Dateinamen gefragt wirst und beliebig viele Dateien nacheinander verschlüsseln kannst.

Hinweis3

Hinweis3

  • Möglichkeit zur Verschlüsselung von beliebigen UniCode Zeichen
c_unicode = ord("c")
C_unicode = ord("C")
print("Unicode von 'c' =", c_unicode)
print("Unicode von 'C' =", C_unicode)
 
character_65 = chr(65)
character_100 = chr(220)
print("Unicode 65 steht für", character_65)
print("Unicode 100 steht für", character_100)
# ausserhalb des englischen Alphabeths:
Ue_unicode = ord("Ü")
print("Unicode von 'Ü' =", Ue_unicode)
character_220 = chr(220)
print("Unicode 220 steht für", character_220)

Wenn du nach einigen Prüfungen Noten hast und einen bestimmten Durchschnitt erreichen möchtest, dann kannst du die ganz leicht ausrechnen (lassen), welche Note du als nächstes schreiben musst.

  1. Schreibe ein Programm, dass deine bisherigen Noten in einem Feld enthält, dich nach dem gewünschten Durchschnitt fragt und dann die Mindesnote ausgibt, die du im nächsten Test erreichen solltest.
  2. Verbessere das Programm so, dass du zusätzlich eingeben kannst, wieviele Tests noch anstehen, also wie viele Noten du noch bekommen kannst.

Hinweis1

Hinweis1

while True:
    Eingabe = input('Gewünschter Schnitt: ')
    if len(Eingabe) == 0:
        break
    # Umwandlung der Texteingabe in eine Dezimalzahl:
    WunschNote = float(Eingabe)

Hinweis2

Hinweis2

Noten = [4.5, 5, 3.75, 5.5]
Durchschnitt_ungerundet = sum(Noten)/len(Noten)
Durchschnitt = round(sum(Noten)/len(Noten), 2)
  1. Lege eine Liste mit Vokabeln an:
    Vokabeln = [
       "lesen","read", 
       "Apfel","apple",
       "geben","give"
    ]
 

Die Vokabeln sind in Paaren hintereinander eingetragen.

  1. Frage alle Variablen der Reihe nach ab und kontrolliere, ob die Antwort richtig war.
  2. Erweitere das Programm um einen Abragemodus: a) Abfrage wie unter 1. und b) Zufallsabrage. Beende dies Programm wenn du eine leere Antwort eingibst.
  3. Ergänze eine Hilfefunktion: Gibst du als Anwort ein '?' ein, so wird die die richtige Antwort zur Frage angezeigt.

Hinweis1

Hinweis1

Da die Variablen in Paaren angeordnet sind, müssen die Indizees vielfache von zwei sein: Die abgefragte Variable 2n+0 und die Antwort 2n+1.

Hinweis2

Hinweis2

Antwort = input(f'Übersetze "{Vokabel}": ')

Expertenaufgabe1

Expertenaufgabe1

  • Baue das Programm so um, dass du die Übersetzungsrichtung wählen kannst.

Expertenaufgabe2

Expertenaufgabe2

  • Erweitere das Programm so, dass du auswertest, wie viel richtige und falsche Antworten du gegeben hast.

Expertenaufgabe2

Expertenaufgabe2

  • Erweitere das Programm so, dass du es für mehr als zwei Sprachen verwenden kannst.

Lösung

Lösung

"""
Vokabeltrainer
"""
from random import randint
 
Vokabeln = [
    'lesen', 'read',
    'Apfel', 'apple',
    'geben', 'give',
    'lächeln', 'smile',
    'rennen', 'run'
]
Richtige = []
Zaehler_richtig = 0
Zaehler_falsch = 0
while True:
    Mode = input('de - Deutsch -> Englisch\ned - Englisch -> Deutsch: ')
    if Mode == 'ed' or Mode == 'de':
        break
    print('Unbekannter Mode, versuche es noch einmal!')
 
while True:
    index = randint(0, len(Vokabeln)//2 - 1)
    #print(f'{index} of {len(Vokabeln)//2 - 1}')
    if index in Richtige:
        if len(Richtige)==len(Vokabeln)//2:
            break
        continue
    deutsch = Vokabeln[2*index]
    englisch = Vokabeln[2*index+1]
    if Mode == 'de':
        Frage = deutsch
        Antwort = englisch
    else:
        Frage = englisch
        Antwort = deutsch
    Test = input(f'Übersetze "{Frage}" ▶ ')
    if len(Test) == 0:
        break
    if Antwort == Test:
        print('richtig')
        Zaehler_richtig += 1
        Richtige.append(index)
    else:
        print('falsch')
        Zaehler_falsch += 1
 
print(f'Du hattest {Zaehler_richtig} richtige und {Zaehler_falsch} falsche {"Antwort" if Zaehler_falsch==1 else "Antworten"}.')
print('fertig')
  • lehrkraefte/sbt/informatik/glf22/python/little-programming-tasks.txt
  • Last modified: 2022/12/09 22:45
  • by Karlheinz Schubert