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

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:sbt:informatik:glf22:python:little-programming-tasks [2022/12/09 07:48]
Karlheinz Schubert
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? ===== ===== Was für eine Note muss ich schreiben, damit ich über einen Schnitt von x.y komme? =====
 +
 <WRAP center round todo> <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. 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.
- * (a) Schreibe ein Programm, dass deine bisherigen Noten in einem Feld enthält, dich nach dem gewünschten Durchschnitt fragt und dann die Mindesnote ausgibt. +  - 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.
  
- (bVerbessere 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> </WRAP>
  • lehrkraefte/sbt/informatik/glf22/python/little-programming-tasks.1670568482.txt.gz
  • Last modified: 2022/12/09 07:48
  • by Karlheinz Schubert