{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Übungsaufgaben\n", "Dieses Jupyter-Notebook enthält verschiedene Aufgaben, um den Umgang mit Python sortiert nach Themenschwerpunkten zu üben. Insbesondere die Gruppe der gemischten Themenschwerpunkte eignet sich als Klausurvorbereitung.\n", "\n", "**Hinweis:** Bei den Aufgabenbeschreibungen sind häufig Beispielabläufe der geforderten Lösungen enthalten. Dabei markiert `>>` eine Eingabe. Der Text danach stellt den Text dar, der bei der Eingabe angezeigt werden soll. Die Beispieleingabe folgt in rekursiver Schreibweise. Soll also `Geben Sie bitte einen Text ein` als Text für die Eingabeaufforderung angezeigt werden und der Benutzer würde `bla` eingeben, sähe das dazugehörige Beispiel also so aus: `>> Geben Sie bitte einen Text ein:` *`bla`*"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Built-In-Funktionen, Variablen und Datentypen "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das für eine Variable `zahl` prüft, ob deren Wert ganzzahlig ist und, falls ja, durch 3 teilbar.\n", "\n", "**Beispiele**\n", "\n", "Für `zahl = 22` soll `true` ausgegeben werden.\n", "\n", "Für `zahl = 23` soll `false` ausgegeben werden.\n", "\n", "Für `zahl = 22.2` soll `false` ausgegeben werden."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["zahl = 22\n", "\n", "# Fügen Sie hier Ihren Code ein.\n", "\n", "print('bla')"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine Zahl einliest, diese als 4-Bit-Binärzahl interpretiert (sie besteht also aus maximal 4 Ziffer und nur aus 0ern und 1ern) und deren Dezimalwert ermittelt.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie eine 4-Bit-Binärzahl ein:` *`1010`*\n", "\n", "`Die Dezimalzahl zu 1010 lautet 10.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine ganze Zahl vom Benutzer einliest und die Binärdarstellung der niederwertigsten 4 Bits ausgibt.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie eine positive, ganze Zahl ein:` *`5`*\n", "\n", "`Die Binärdarstellung zu 123 lautet 0101.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Kontrollfluss"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine beliebig lange Zahl einliest, diese als Binärzahl interpretiert (sie besteht also nur aus 0ern und 1ern) und deren Dezimalwert ermittelt. Geben Sie zwei Lösungen an und verwenden Sie bei jeder Lösung eine andere Schleifenart.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie eine Binärzahl ein:` *`101010101010`*\n", "\n", "`Die Dezimalzahl zu 101010101010 lautet 2730.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine beliebig lange, ganze Zahl vom Benutzer einliest und die Binärdarstellung ausgibt.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie eine ganze, positive Zahl ein:` *`2730`*\n", "\n", "`Die Binärdarstellung zu 2730 lautet 101010101010.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Listen"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das zu einer Liste den Durchschnitt aller Zahlenwerte ermittelt.\n", "\n", "**Beispiel**\n", "\n", "Für liste = [3, 'ein Wort', 2.8, 2, 'noch ein Wort', 6, 3.2, 4, '2']
soll 3.5
ausgegeben werden."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["liste = [3, 'ein Wort', 2.8, 2, 'noch ein Wort', 6, 3.2, 4, '2']\n", "\n", "# Fügen Sie hier Ihren Code ein"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine beliebige Liste in umgekehrter Reihenfolge ausgibt, wobei immer nur jeder zweite Wert von hinten angezeigt werden soll.\n", "\n", "**Beispiel**\n", "\n", "Für liste = [1, 'ein Wort', 2.5, 2, 'noch ein Wort', 6, 3.333, 4, '2']
soll folgendes ausgegeben werden:\n", "\n", "2
3.333
noch ein Wort
2.5
1
\n"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["liste = [1, 'ein Wort', 2.5, 2, 'noch ein Wort', 6, 3.333, 4, '2']\n", "\n", "# Fügen Sie hier Ihren Code ein"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das für eine beliebige Liste nur die ganzzahligen, geraden Werte aufsummiert.\n", "\n", "**Beispiel**\n", "\n", "Für liste = [1, 'ein Wort', 2.5, 2, 'noch ein Wort', 6, 3.333, 4, '2']
soll 12
ausgegeben werden."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["liste = [1, 'ein Wort', 2.5, 2, 'noch ein Wort', 6, 3.333, 4, '2']\n", "\n", "# Fügen Sie hier Ihren Code ein"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Zeichenketten"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Kopieren Sie die beliebige Zeichenkette zeichenkette
so, dass alle Wörter, die mit einem Vokal beginnen, nicht in der Kopie enthalten sind. Satzzeichen können ignoriert werden und müssen nicht kopiert werden."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["zeichenkette = 'Dieser Text enthält mehrere Wörter, einige davon beginnen mit Vokalen. Ein Wort, das mit einem Vokal beginnt ist Ameise. Dieses Wort soll also entfernt werden.'\n", "\n", "kopie = # Fügen Sie ab hier Ihren Code ein.\n", "\n", "print(kopie)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Kopieren Sie die beliebige Zeichenkette zeichenkette
so, dass alle Vorkommen eines bestimmten durch den Benutzer festgelegten (Teil-)Wortes durch ein anderes durch den Benutzer festgelegtes Wort ersetzt werden.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *`Das ist ein Beispielsatz. In diesem Beispiel soll die Textersetzung geübt werden.`*
\n", "`>> Geben Sie bitte einen Teil der Zeichenkette ein, der ersetzt werden soll:` *`Beispiel`*\n", "
\n", "`>> Geben Sie bitte die Zeichenkette ein, die dafür eingefügt werden soll:` *`Bsp.`*\n", "
\n", "`Das ist ein Bsp.satz. In diesem Bsp. soll die Textersetzung geübt werden. Deshalb ist es ein Übungsbeispiel.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine Eingabe vom Benutzer entgegennimmt und prüft, ob die Eingabe ein Palindrom ist, also genauso rückwärts gelesen werden kann.\n", "\n", "**1. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *`Das ist kein Palindrom`*\n", "
\n", "`False`\n", "\n", "**2. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *`Erika feuert nur untreue Fakire`*\n", "
\n", "`True`\n", "\n", "**3. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *`Trug Tim eine so helle Hose nie mit Gurt`*\n", "
\n", "`True`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das die Worte eines Satzes auf Zahlenwörter prüft und die entsprechenden numerischen Werte aufaddiert.\n", "\n", "**1. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *Peter ist auf einer Lan***drei***se durch ***zwei*** Wohn***vier***tel unterwegs.*
\n", "
\n", "`Die Summe lautet 9.`\n", "\n", "**2. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` ***Acht***ung! Ein N***acht***falter landet im Er***drei***ch.
\n", "
\n", "`Die Summe lautet 19.`\n", "\n", "**3. Beispiel**\n", "\n", "`>> Geben Sie bitte einen Satz ein:` *Eine Fahrt mit Ra***drei***fen nach W***eins***tein ist kur***zwei***lig.*
\n", "
\n", "`Die Summe lautet 6.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Dictionaries"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das alle Einträge einer Liste in einem Dictionary speichert. Als Schlüssel soll die Position innerhalb der Liste verwendet werden. Geben Sie anschließend die Einträge des Dictionary zeilenweise in der Form Schlüssel -> Wert
aus."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["liste = [1, 'ABBA', 23.3, 45, 'Text', -123]\n", "\n", "# Fügen Sie hier Ihren Code ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das ein Dictionary beinhaltet und daraus ein neues Dictionary erstellt, in dem die vorher enthaltenen Paare umgedreht werden, also jeder Schlüssel jetzt Wert und umgekehrt ist. Die Umwandlung soll für beliebige Dictionaries funktionieren. Das Programm soll beide Dictionaries ausgeben. \n", "\n", "Ist eine Umdrehung der Key-Value-Beziehung eines Dictionaries immer möglich?\n", "\n", "**Beispiel**\n", "\n", "`altes_dict[a] = 1`\n", "
\n", "`altes_dict[b] = 2`\n", "
\n", "`altes_dict[c] = 3`\n", "
\n", "`neues_dict[1] = a`\n", "
\n", "`neues_dict[2] = b`\n", "
\n", "`neues_dict[3] = c`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das Eingaben vom Benutzer solange liest, bis dieselbe Eingabe 3-mal (nicht notwendigerweise direkt hintereinander) erfolgt ist. Am Ende soll das Programm alle Eingaben und deren Häufigkeit ausgeben. Die Information soll als Dictionary abgelegt werden.\n", "\n", "**Beispiel**\n", "\n", "`>> Machen Sie eine Eingabe:` *`12a`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`a`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`a`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`12`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`abc`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`12a`*\n", "
\n", "`>> Machen Sie eine Eingabe:` *`a`*\n", "
\n", "`Die Eingabe '12a' wurde 2-mal getätigt.`\n", "
\n", "`Die Eingabe 'a' wurde 3-mal getätigt.`\n", "
\n", "`Die Eingabe '12' wurde 1-mal getätigt.`\n", "
\n", "`Die Eingabe 'abc' wurde 1-mal getätigt.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Objektorientierte Programmierung (OOP)"]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Diese Aufgabe besteht aus den untenstehenden beiden Teilaufgaben.\n", "\n", "#### Teilaufgabe\n", "Erstellen Sie eine Klasse `ZeichenZaehler`, die bei der Erstellung eines ihrer Objekte einen String mit zu suchenden Zeichen übergeben bekommt. Die Klasse soll eine öffentliche Methode `zaehle` anbieten, die wiederum einen String übergeben bekommt. Innerhalb dieses Strings werden die Zeichen gezählt, die bei der Erstellung des Objekts übergeben wurden. Die Methode kann mehrfach mit unterschiedlichen Strings aufgerufen werden und liefert `True` zurück, wenn ein String übergeben wurde, ansonsten `False`. Die Klasse bietet eine zweite öffentliche Methode `zaehlerStand` an, die zurückliefert, wie häufig die zu zählenden Zeichen bisher insgesamt gezählt wurden. Zudem bietet die Klasse eine dritte öffentliche Methode `setzeZurueck` an, die den Zählerstand zurücksetzt. Ansonsten soll die Klasse keine Informationen nach außen anbieten. Zwischen Groß- und Kleinschreibung soll nicht unterschieden werden."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihre Klassendefinition für ZeichenZaehler ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["#### Teilaufgabe\n", "Führen Sie die obige Code-Zelle aus, sodass Ihre Klassendefinition für `ZeichenZaehler` bekannt ist. Lassen Sie den Benutzer nun solange Eingaben vornehmen, bis er eine leere Eingabe tätigt. Nach jeder Eingabe soll die Anzahl aller bisherig eingegebenen Vokale angezeigt werden. Gibt der Benutzer `0` ein, soll das Zählen von vorne beginnen. Nutzen Sie dafür Ihre oben definierte Klasse.\n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie einen Text ein: ` *`Das ist ein Text.`*\n", "
\n", "`Bisher war(en) 5 Vokal(e) in Ihren Eingaben enthalten.`\n", "
\n", "`>> Geben Sie einen Text ein: ` *`Ein neuer Text.`*\n", "
\n", "`>> Bisher war(en) 11 Vokal(e) in Ihren Eingaben enthalten.`\n", "
\n", "`>> Geben Sie einen Text ein: ` *`0`*\n", "
\n", "`>> Geben Sie einen Text ein: ` *`Das ist wieder ein Text.`*\n", "
\n", "`Bisher war(en) 8 Vokal(e) in Ihren Eingaben enthalten.`\n", "
\n", "`>> Geben Sie einen Text ein: ` *`Und noch einer.`*\n", "
\n", "`Bisher war(en) 13 Vokal(e) in Ihren Eingaben enthalten.`\n", "
\n", "`>> Geben Sie einen Text ein: `\n", "
\n", "`Bisher war(en) 13 Vokal(e) in Ihren Eingaben enthalten.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe Entwurfsmuster\n", "\n", "### Aufgabe\n", "\n", "#### Teilaufgabe\n", "Schreiben Sie eine Klasse `Quadrat`, die bei der Erstellung eines Objekts die Seitenlänge übergeben bekommt und als öffentliche Methode `seitenlaenge` anbietet, die die Seitenlänge zurückgibt. Führen Sie die Code-Zelle aus, um die Klasse der nächsten Teilaufgabe bekannt zu machen."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code für die Quadrat-Klasse ein."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["#### Teilaufgabe\n", "Schreiben Sie nun einen Objekt-Adapter `Rechteckadapter`, der ein Objekt der Klasse `Quadrat` auf das Ziel-Interface `ZielRechteck` anpasst. Verwenden Sie den Adapter, um das `Quadrat`-Objekt mit der `verarbeiteRechteck`-Funktion verwenden zu können. Code darf nur an den markierten Stellen verändert bzw. hinzugefügt werden. \n", "\n", "**Hinweis:** Die `verarbeiteRechteck`-Funktion darf nicht verändert werden. Solange der Adapter nicht richtig implementiert und erstellt wurde, wird der Code Fehler produzieren."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code für die RechteckAdapter-Klasse ein.\n", "\n", "def verarbeiteRechteck(rechteck):\n", " print(f'Die 1. Seite des Rechtecks ist {rechteck.seite1()} Einheiten lang.')\n", " print(f'Die 2. Seite des Rechtecks ist {rechteck.seite2()} Einheiten lang.')\n", " print(f'Die Fläche des Rechtecks beträgt {rechteck.flaecheninhalt()} Einheiten.')\n", " print(f'Der Umfang des Rechtecks beträgt {rechteck.umfang()} Einheiten.')\n", "\n", "\n", "quadrat = Quadrat(4)\n", "verarbeiteRechteck(quadrat) # Erstellen bzw. ergänzen Sie hier Ihr Adapter-Objekt, um es mit dem Quadrat-Objekt an die Funktion zu übergeben."]}, {"attachments": {}, "cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Es soll eine Vorrichtung implementiert werden, die zählt, wie viele Personen sich in einem Raum befinden. An den Eingängen des Raums befinden sich Ampeln, die grün anzeigen, falls noch weitere Personen eintreten dürfen, gelb, falls nur noch eine Person eintreten darf, und rot, falls sich die Höchstanzahl an Personen im Raum befindet. In der übernächsten Code-Zelle ist dieses Verhalten simuliert, allerdings noch nicht lauffähig.\n", "\n", "#### Teilaufgabe\n", "Implementieren Sie daher zunächst die Klasse `EntryCounter`, die einen Raumbelegungssensor simuliert und immer aufgerufen wird, wenn eine Person den Raum betritt oder verlässt. Bei der Erstellung eines ihrer Objekte kann die Höchstzahl an Personen für den Raum festgelegt werden. Implementieren Sie die Klasse zunächst so, dass immer nur die richtige Anzahl an Personen in der übernächsten Code-Zelle angezeigt wird. Vergessen Sie nach der Implementierung der Klasse nicht, die untere Code-Zelle auszuführen, um ihren Inhalt der übernächsten Code-Zelle bekannt zu machen. Die Ampeln können Sie hier erst einmal ignorieren.\n", "\n", "#### Teilaufgabe\n", "Nun sollen die Ampeln ebenfalls immer richtig eingestellt werden. Also grün, wenn noch mehr als eine Person eintreten darf, gelb, wenn nur noch eine Person eintreten darf, und rot, wenn keine Person mehr eintreten darf. Nutzen Sie dafür das Beobachter-Entwurfsmuster. Erweitern Sie dafür die Klassen `EntryCounter` und `TrafficLight`. Ggf. müssen Sie nun auch zwei Zeilen Code in der übernächsten Code-Zelle an markierter Stelle ergänzen. Zudem sollen die Ampeln immer nur aktualisiert werden, wenn eine Änderung Ihres Status vorliegt."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code für die Klasse EntryCounter ein.\n", "\n", "class TrafficLight:\n", " def __init__(self, status):\n", " self.__status = status\n", "\n", " def get_light_status(self):\n", " return self.__status\n", "\n", " # Erweitern Sie hier die Klasse TrafficLight um weitere Methoden, falls notwendig."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Dieser Code darf nur an markierten Stellen erweitert, ansonsten aber nicht verändert werden.\n", "\n", "traffic_light1 = TrafficLight('red')\n", "traffic_light2 = TrafficLight('red')\n", "\n", "entry_counter = EntryCounter(5)\n", "# Fügen Sie hier zusätzlichen Code für entry_counter ein, falls notwendig, und nur, wenn Sie in der Aufgabenbeschreibung dazu aufgefordert werden.\n", "\n", "for enter_or_leave in [1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1]:\n", " if enter_or_leave == 1:\n", " entry_counter.someoneEnters()\n", " elif enter_or_leave == -1:\n", " entry_counter.someoneLeaves()\n", " else:\n", " print(f'Unrecognized code: {enter_or_leave}')\n", "\n", " print(f'People in the room: {entry_counter.getCount()}')\n", " print(f'Traffic light 1: {traffic_light1.get_light_status()}')\n", " print(f'Traffic light 2: {traffic_light2.get_light_status()}\\n')"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Aufgabengruppe gemischt\n", "**Wichtig:** An den meisten Stellen sind globale Variablen verboten. Sollten Sie also Funktionen schreiben und die Variablen bereits vorhandenen Quellcodes direkt in der Funktion verwenden, ohne diese übergeben bekommen zu haben, ist dies ebenfalls ein Fehler."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine Textdatei ein_filter_anfangszeichen.txt
einliest und jede Zeile in eine Textdatei aus_filter_anfangszeichen.txt
schreibt. Dabei sollen alle Wörter herausgefiltert werden, die mit Buchstaben der Zeichenkette filter_zeichen
beginnen. Sie können davon ausgehen, dass die Wörter eines Texts immer nur durch Leerzeichen getrennt sind.\n", "\n", "**Beispiel:**\n", "\n", "filter_zeichen = 'AEIOUaeiou'
\n", "\n", "ein_filter_anfangszeichen.txt
enthält:\n", "\n", "*Eine Textdatei beginnt mit T*
\n", "*Sie beginnt nicht immer mit a*
\n", "*Aber das ist natürlich auch Quatsch*
\n", "\n", "Nach Aufruf des Programms enthält aus_filter_anfangszeichen.txt
:\n", "\n", "*Textdatei beginnt mit T*
\n", "*Sie beginnt nicht mit*
\n", "*das natürlich Quatsch*
\n"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["filter_zeichen = 'AEIOUaeiou' # Die Werte sollen als veränderbar angesehen werden.\n", "\n", "# Fügen Sie hier Ihren Code ein."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Python-Programm, das vom Benutzer solange Eingaben einliest, bis der Benutzer eine leere Eingabe tätigt. Zählen Sie danach die einzelnen Zeichen und speichern Sie das Ergebnis mithilfe eines Dictionaries. Geben Sie schließlich alle eingegebenen Zeichen mit Ihrer Häufigkeit und Ihrem prozentualen Anteil an der Gesamtanzahl an Zeichen aus.\n", "\n", "Implementieren Sie zunächst eine Funktione gib_mehrere_eingaben_ein
, die das Einlesen mehrerer Eingaben übernimmt, bis der Benutzer einfach Enter drückt (also eine leere Eingabe tätigt). Die Funktion soll alle Eingaben als eine Zeichenkette zurückgeben.\n", "\n", "Implementieren Sie danach eine Funktion ermittle_haeufigkeiten
, die die Eingabezeichenkette von oben übergeben bekommt und daraus ein Dictionary erstellt, das zu jedem Zeichen dessen Anzahl in der Zeichenkette speichert. Die Funktion gibt dieses Dictionary zurück.\n", "\n", "Implementieren Sie schließlich eine Funktion gib_haeufigkeiten_aus
, die das Dictionary von oben übergeben bekommt und daraus zu jedem Zeichen die Häufigkeit in der Zeichenkette sowie den prozentualen Anteil zur Gesamtanzahl an Zeichen ausgibt.\n", "\n", "Schreiben Sie keinerlei Code außer die drei geforderten Funktionen. Globale Variablen sind verboten. Zudem muss Ihr Programm mit dem bereits vorhandenen Code laufen. Sie sollen nur die fehlenden Funktionen ergänzen. \n", "\n", "**Beispiel**\n", "\n", "`>> Geben Sie bitte Text ein:` *`aad b`*\n", "
\n", "`>> Geben Sie bitte Text ein:` *`cb`*\n", "
\n", "`>> Geben Sie bitte Text ein:` *`dda`*\n", "
\n", "`>> Geben Sie bitte Text ein:`\n", "
\n", "`Zeichen 'a' kommt so häufig in Ihren Eingaben vor: 3 (30.0 %)`\n", "
\n", "`Zeichen 'd' kommt so häufig in Ihren Eingaben vor: 3 (30.0 %)`\n", "
\n", "`Zeichen ' ' kommt so häufig in Ihren Eingaben vor: 1 (10.0 %)`\n", "
\n", "`Zeichen 'b' kommt so häufig in Ihren Eingaben vor: 2 (20.0 %)`\n", "
\n", "`Zeichen 'c' kommt so häufig in Ihren Eingaben vor: 1 (10.0 %)`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein. Es sind nur die geforderten Funktionen erlaubt. Globale Variablen oder anderer Code außerhalb der Funktionen sind nicht erlaubt.\n", "\n", "# Der untenstehende Code soll sich nicht verändern. Das Programm soll mithilfe Ihrer Funktionen korrekt laufen.\n", "if __name__ == '__main__':\n", " eingabe = gib_mehrere_eingaben_ein()\n", " haeufigkeiten_dict = ermittle_haeufigkeiten(eingabe)\n", " gib_haeufigkeiten_aus(haeufigkeiten_dict)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Schreiben Sie ein Programm, das eine Textdatei studierende.txt
mit Studierenden-Daten einliest und die Daten gewünschter Matrikelnummern am Bildschirm ausgibt. Die Textdatei enthält pro Zeile immer die folgende Werte mit einem ;
getrennt: Matrikelnummer;Vor- und Nachname;Note
\n", "\n", "Es soll zudem für jede Ausgabe vermerkt werden, ob die jeweilige Note oberhalb des Notendurchschnitts liegt. Dieser soll am Ende mit ausgegeben werden.\n", "\n", "Schreiben Sie zunächst eine Funktion lies_studierende_ein
, die eine Textdatei mit dem übergebenen Namen einliest und das Ergebnis als Dictionary zurückliefert. Der Notendurchschnitt soll hier noch nicht ermittelt werden. Sie können davon ausgehen, dass innerhalb der Zeilen keine Fehler enthalten sind, also die Formatvorgabe immer eingehalten wird. Allerdings sind leere Zeilen möglich.\n", "\n", "Schreiben Sie danach eine Funktion gib_studierenden_daten_aus
, die das Dictionary und einen Teil einer Matrikelnummer übergeben bekommt, eine Ausgabe nach untenstehender Vorgabe durchführt und dabei den Notendurchschnitt ermittelt. Sollte die Ausgabe pro Eintrag anders als im Beispiel über zwei Zeilen gehen, ist dies tolerierbar.\n", "\n", "Schreiben Sie keinerlei Code außer die drei geforderten Funktionen. Globale Variablen sind verboten. Zudem muss Ihr Programm mit dem bereits vorhandenen Code laufen. Sie sollen nur die fehlenden Funktionen ergänzen.\n", "\n", "**Hinweis:** Vergessen Sie nicht, dass die Daten einer Textdatei zunächst nur als Zeichenkette ausgelesen werden.\n", "\n", "**Beispiel:**\n", "\n", "Inhalt der Textdatei:\n", "
\n", "1234567;Max Mustermann;1.7
9991231;Helene Meier;1.3
1928374;Frank Müller;3.7
9876123;Maria Schmidt;4.0
\n", "\n", "**Ablauf des Programms:**\n", "\n", "`>> Bitte geben Sie den Teil einer Matrikelnummer ein:` *`123`*\n", "
\n", "`Notendurchschnitt: 2.675`\n", "
\n", "`Max Mustermann (1234567) liegt mit 1.7 im Durchschnitt oder besser.`\n", "
\n", "`Helene Meier (9991231) liegt mit 1.3 im Durchschnitt oder besser.`\n", "
\n", "`Maria Schmidt (9876123) liegt mit 4.0 schlechter als der Durchschnitt.`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein. Es sind nur die geforderten Funktionen erlaubt. Globale Variablen oder anderer Code außerhalb der Funktionen sind nicht erlaubt.\n", "\n", "# Der untenstehende Code soll sich nicht verändern. Das Programm soll mithilfe Ihrer Funktionen korrekt laufen.\n", "if __name__ == '__main__':\n", " stud_dict = lies_studierende_ein('studierende.txt')\n", " matrikel_filter = input('Geben Sie den Teil einer Matrikelnummer ein: ')\n", " gib_studierende_aus(stud_dict, matrikel_filter)\n", " "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Aufgabe\n", "Für einen Zoo können Eintritte im Voraus bezahlt werden. Wer dies nutzen will, zeigt seinen Ausweis am Eingang und zahlt für eine bestimmte Anzahl an Besuchen. Bei einem erneuten Eintritt muss nun nur noch der Name aus dem Personalausweis eingelesen werden, bis die maximale Anzahl an Besuchen erreicht ist. Alternativ kann zusätzlich für eine weitere Anzahl an Besuchen vorbezahlt werden. Wer nicht vorbezahlt hat oder keine Besuche mehr auf seinem Konto hat, wird nicht eingelassen.\n", "\n", "Simulieren Sie dieses Szenario, bis eine leere Eingabe erfolgt. Durch die Eingabe des Namens mit einem Plus und einer Zahl kann das Konto entsprechend erhöht bzw. angelegt werden, also z.B. Hans Müller+10
würde die Anzahl von Besuchen von Hans Müller um 10 erhöhen bzw. den Account mit 10 Besuchen anlegen und anschließend einen Besuch tätigen. Wird nur der Name angegeben, wird ein Besuch abgezogen oder der Einlass verweigert. Sie können davon ausgehen, dass nur sinnvolle Eingaben getätigt werden, also entweder nur ein Name eingegeben wird oder ein Name mit einem + und einer positiven Zahl eingegeben wird.\n", "\n", "**Beispiel**\n", "`>> Wer geht in den Zoo:` *`Hans Müller+1`*\n", "
\n", "`Eintritt gewährt. Danach haben Sie noch 0 Besuch(e) offen.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Martha Mustermann`*\n", "
\n", "`Eintritt verweigert. Bitte laden Sie Ihren Account auf.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Martha Mustermann+10`*\n", "
\n", "`Eintritt gewährt. Danach haben Sie noch 9 Besuch(e) offen.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Hans Müller`*\n", "
\n", "`Eintritt verweigert. Bitte laden Sie Ihren Account auf.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Hans Müller+15`*\n", "
\n", "`Eintritt gewährt. Danach haben Sie noch 14 Besuch(e) offen.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Hans Müller+5`*\n", "
\n", "`Eintritt gewährt. Danach haben Sie noch 18 Besuch(e) offen.`\n", "
\n", "`>> Wer geht in den Zoo:` *`Martha Mustermann`*\n", "
\n", "`Eintritt gewährt. Danach haben Sie noch 8 Besuch(e) offen.`\n", "
\n", "`>> Wer geht in den Zoo:`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Fügen Sie hier Ihren Code ein"]}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.9"}, "toc": {"base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false}, "vscode": {"interpreter": {"hash": "5262627ae68dcea4376de6b1fa6fa990a8f0102ba1998c55b1d43f5e3b907515"}}}, "nbformat": 4, "nbformat_minor": 2}