====== Kleine Programmieraufgaben ====== ===== Caesar Verschlüsselung ===== - Schau dir den Verschlüsselungsalgorithmus an, der nach dem römischen Kaiser Caesar benannt ist [[https://de.wikipedia.org/wiki/Caesar-Verschl%C3%BCsselung|Wikipedia: Caesar-Verschlüsselung]]. - 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. Satz = input('Quelltext: ') while True: Eingabe = input('Quelltext: ') if len(Eingabe) == 0: break print('fertig') 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) ---- * Schreibe ein Verschlüsselungsprogramm, dass eine Quelltextdatei 'text.txt' einliest und als Datei 'text_encrypted.txt' auf die Festplatte schreibt. 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. * 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) ===== Was für eine Note muss ich schreiben, damit ich über einen Schnitt von x.y komme? ===== 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. - 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. - Verbessere das Programm so, dass du zusätzlich eingeben kannst, wieviele Tests noch anstehen, also wie viele Noten du noch bekommen kannst. while True: Eingabe = input('Gewünschter Schnitt: ') if len(Eingabe) == 0: break # Umwandlung der Texteingabe in eine Dezimalzahl: WunschNote = float(Eingabe) Noten = [4.5, 5, 3.75, 5.5] Durchschnitt_ungerundet = sum(Noten)/len(Noten) Durchschnitt = round(sum(Noten)/len(Noten), 2) ===== Vokabeltrainer ===== - Lege eine Liste mit Vokabeln an: Vokabeln = [ "lesen","read", "Apfel","apple", "geben","give" ] Die Vokabeln sind in Paaren hintereinander eingetragen. - Frage alle Variablen der Reihe nach ab und kontrolliere, ob die Antwort richtig war. - Erweitere das Programm um einen Abragemodus: a) Abfrage wie unter 1. und b) Zufallsabrage. Beende dies Programm wenn du eine leere Antwort eingibst. - Ergänze eine Hilfefunktion: Gibst du als Anwort ein '?' ein, so wird die die richtige Antwort zur Frage angezeigt. 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. Antwort = input(f'Übersetze "{Vokabel}": ') ---- * Baue das Programm so um, dass du die Übersetzungsrichtung wählen kannst. * Erweitere das Programm so, dass du auswertest, wie viel richtige und falsche Antworten du gegeben hast. * Erweitere das Programm so, dass du es für mehr als zwei Sprachen verwenden kannst. """ 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')