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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:sbt:informatik:glf22:python:little-programming-tasks [2022/12/09 07:42]
Karlheinz Schubert created
lehrkraefte:sbt:informatik:glf22:python:little-programming-tasks [2022/12/09 22:45] (current)
Karlheinz Schubert
Line 2: Line 2:
  
 ===== Caesar Verschlüsselung ===== ===== Caesar Verschlüsselung =====
 +  
 <WRAP center round todo> <WRAP center round todo>
-  * (a) 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]].+  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.
  
-  * (b) Schreibe ein kleines Programm, das nach dem Veschiebewert fragt und dann in einer Endlosschleife texte verschlüsselt. Die Endlosschleife wird mit einer leeren Eingabe beendet. +<hidden Hinweis1> 
- +<code python> 
-<hidden Hinweis:>Ergänze dein beim Video-Anschauen geschriebenes Programm um Befehle wie ''print(2<nowiki>**</nowiki>10)'', führe es aus und variiere die Zahlen so lange, bis du das Rechenzeichen ''<nowiki>**</nowiki>'' verstehst.+Satz = input('Quelltext: '
 +</code>
 </hidden> </hidden>
-<hidden Hinweis für die beiden letzten Rechenzeichen>Division mit Rest! Beispielsweise gilt "73 geteilt durch 10 ist 7 Rest 3". Ergänze dein Programm um die folgenden Zeilen:+<hidden Hinweis2>
 <code python> <code python>
-print(73 // 7+while True: 
-print(73 % 7)+    Eingabe = input('Quelltext: ') 
 +    if len(Eingabe) == 0: 
 +        break 
 +print('fertig')
 </code> </code>
 </hidden> </hidden>
 +<hidden Hinweis3>
 +<code python>
 +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)
 +</code>
 +</hidden>
 ---- ----
 +<hidden Expertenaufgabe>
 +  * Schreibe ein Verschlüsselungsprogramm, dass eine Quelltextdatei 'text.txt' einliest und als Datei 'text_encrypted.txt' auf die Festplatte schreibt.
  
-<hidden Lösung:>Das Zeichen ''<nowiki>**</nowiki>'' ist Potenzieren (also etwa "2 hoch 10"), ''<nowiki>//</nowiki>'' ist ganzzahlige Division und ''%'' ist der Rest der ganzzahligen Division (ganzzahlige Division von 47 durch 10 liefert 4 Rest 7). +<hidden Hinweis> 
-   +<code python> 
-Dies wird auch im Video im folgenden Abschnitt zur Python-Shell erklärt.</hidden>+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() 
 +</code> 
 +</hidden> 
 +  * Ergänze das Programm so, dass du nach dem Dateinamen gefragt wirst und beliebig viele Dateien nacheinander verschlüsseln kannst. 
 +</hidden> 
 +<hidden Hinweis3> 
 +  * Möglichkeit zur Verschlüsselung von beliebigen UniCode Zeichen 
 +<code python> 
 +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)
 +</code>
 +</hidden>
 </WRAP> </WRAP>
  
 +===== Was für eine Note muss ich schreiben, damit ich über einen Schnitt von x.y komme? =====
 +
 +<WRAP center round todo>
 +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.
 +
 +<hidden Hinweis1>
 +<code python>
 +while True:
 +    Eingabe = input('Gewünschter Schnitt: ')
 +    if len(Eingabe) == 0:
 +        break
 +    # Umwandlung der Texteingabe in eine Dezimalzahl:
 +    WunschNote = float(Eingabe)
 +</code>
 +</hidden>
 +
 +<hidden Hinweis2>
 +<code python>
 +Noten = [4.5, 5, 3.75, 5.5]
 +Durchschnitt_ungerundet = sum(Noten)/len(Noten)
 +Durchschnitt = round(sum(Noten)/len(Noten), 2)
 +</code>
 +</hidden>
 +</WRAP>
 +
 +===== Vokabeltrainer =====
 +  
 +<WRAP center round todo>
 +  - Lege eine Liste mit Vokabeln an:
 +    <code python>
 +    Vokabeln = [
 +       "lesen","read", 
 +       "Apfel","apple",
 +       "geben","give"
 +    ]
 +    </code>
 +    
 +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.
 +
 +<hidden 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.
 +</hidden>
 +<hidden Hinweis2>
 +<code python>
 +Antwort = input(f'Übersetze "{Vokabel}": ')
 +</code>
 +</hidden>
 +----
 +<hidden Expertenaufgabe1>
 +  * Baue das Programm so um, dass du die Übersetzungsrichtung wählen kannst.
 +</hidden>
 +<hidden Expertenaufgabe2>
 +  * Erweitere das Programm so, dass du auswertest, wie viel richtige und falsche Antworten du gegeben hast. 
 +</hidden>
 +<hidden Expertenaufgabe2>
 +  * Erweitere das Programm so, dass du es für mehr als zwei Sprachen verwenden kannst. 
 +</hidden>
 +<hidden Lösung>
 +<code python>
 +"""
 +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')
 +
 +</code>
 +</hidden>
 +</WRAP>
  • lehrkraefte/sbt/informatik/glf22/python/little-programming-tasks.1670568164.txt.gz
  • Last modified: 2022/12/09 07:42
  • by Karlheinz Schubert