Commit afde13ca authored by Raffaele Grosso's avatar Raffaele Grosso
Browse files

Further translate Python exercises into German

parent 42f31dac
\documentclass[10pt,a4paper]{letter}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{stix}
\usepackage{enumitem}
\usepackage{bm}
\usepackage[margin=4.2cm]{geometry}
......@@ -135,21 +136,125 @@ Schlüsselworte wie \texttt{if}, \texttt{else}, \texttt{while}, \texttt{for}, \t
\Chapter{Lesen und Schreiben von Dateien (File I/O)}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Programm, das einen Text von einer Datei einließt und den Inhalt in eine andere Datei schreibt, nachdem es die Zeilenumbrüche (newlines) mit Leerzeichen ersetzt hat. Die Dateinamen sollen vom User eingegeben werden.
\item Schreibe ein Programm, das ein Dictionary mit Schlüssel-Wert-Paare aus einer im json-Format geschriebenen Datei füllt, dem User anbietet, über das Terminal andere Paare hinzuzufügen und das aktualisierte Dictionary in die selbe Json-Datei schreibt.
\sitem Schreibe ein Programm, das ein Dictionary mit Schlüssel-Wert-Paare aus einer im json-Format geschriebenen Datei füllt, dem User anbietet, über das Terminal andere Paare hinzuzufügen und das aktualisierte Dictionary in die selbe Json-Datei schreibt.
\Hint{Benutze die \texttt{dump}- und \texttt{laod}-Funktionen der \texttt{json}-Module.}
\end{enumerate}
\Chapter{Graphen, Histogrammen}
\Chapter{Funktionen und Module}
Folgende Aufgaben fordern, Funktionen (Blocks von Anweisungen) zu definieren und Module (Python-Programmdateien) zu schreiben und importieren. Funktionen und Module erlauben mehrmals denselben Code zu benutzen.
\Chapter{Funktionen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Plotte ein Histogramm der Häufigkeit pro Monat von Geburtsdaten von der Übung oben.
\item
\begin{minipage}[t]{0.7\textwidth}
Schreibe ein Programm, welches ein Schachbrett zeichnet (Abbildung rechts) und dafür abwechselnd eine \texttt{ungerade\_Zeile}- (die mit einem weißen Feld anfangen) und eine \texttt{gerade\_Zeile}- (die mit einem weißen Feld anfangen) über Funktionen erzeugt.
\Hint{Lass die Zeile eine Reihenfolge von Unicode-Zeichen sein: \texttt{2B1B} für ein schwarzes Feld und \texttt{2B1C} für ein weißes Feld.}
\end{minipage}
\begin{minipage}[t]{0.3\textwidth}
$\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare$\\
$\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare$\\
$\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare$\\
$\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare$\\
$\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare$\\
$\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare$\\
$\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare$\\
$\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare$
\end{minipage}
\sitem Schreibe eine Dokumentation-String (\textit{docstring}) für beide Funktionen und fordere sie zur Laufzeit (in einer interaktiven Python-Shell oder explizit mit \texttt{.\_\_doc\_\_}).
\sitem Wie in der Aufgabe \ref{Listen}.\ref{2} aber jetzt soll eine anonyme Funktion (\textit{lambda}) als ``\texttt{key=}''-Argument von \texttt{sort} oder \texttt{sorted} benutzt werden, die die \texttt{lower}-Funktion von einem string-Object benutzt.
\Example{``\texttt{I like this color}'' soll ``\texttt{color I like this}'' werden.}
\sitem Schreibe ein Minimalbeispiel, das den Unterschied zeigt, zwischen (nicht) \texttt{global}en Variabeln in einer Funktion.
\sitem Schreibe eine Funktion die ein normales Argument plus beliebige Positionsargumente und Schlüsselwortargumente fängt und rufe sie mit drei Positions- und zwei Schlüsselwortargumente auf.
\Hint{Benutze die standard Aufrufsignature \lstinline{f(a, *args, **kwargs)} und greife innerhalb der Funktion die Positionsargumente in der Tuple \texttt{args} und die Schlüsselwortargumente in der Dictionary \texttt{kwargs} zu.}
\end{enumerate}
\Chapter{Funktionen}
\Chapter{Module}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Modul für alphabetisches Sortieren (die \texttt{alphasort.py} Datei), das zwei Funktionen (\texttt{sort} und \texttt{isort}) enthält: sie sollen eine Zeichenkette (die mehrere Wörte enthält) als Argument nehmen und eine alphabetisch sortierte Liste von Wörte zurückgeben, ohne Groß-/Kleinschreibung zu unterscheiden im Fall von der \texttt{isort}-Funktion (benutze den Code deiner Lösungen von \ref{Listen}.\ref{1} und \ref{Listen}.\ref{2}).
\item Von einem Skript oder einer interaktiven Shell importiere das Modul mit:
\begin{enumerate}[label=\textbf{\roman*)}]
\item \texttt{import alphasort}
\item \texttt{import alphasort as srt}
\item \texttt{from alphasort import *}
\end{enumerate}
und benutze die zwei Funktionen.
\sitem Ergänze das Modul mit einem \texttt{if \_\_name\_\_ == "\_\_main\_\_":} -Block, damit die Funktionen nur ausgeführt werden, wenn das Modul ausgeführt wird, aber nicht wenn es importiert wird.
\item Benutze die \texttt{dir}-Funktion, um den Namensraum des importierten Modules zu untersuchen.
% \sitem Reshape the module above into a package (modules inside a common directory) and use the \lstinline{__init__.py} file to define which modules are to be exported (the so called \textit{API} of the package) and which not (the internal modules).
\end{enumerate}
\Chapter{Ausnahmen}
Schreibe einen kleinen Skript -- \texttt{inverse.py} -- (oder eine Funktion -- \texttt{inverse} -- in einer interaktiven Shell), das eine Zahl von einer als Argument gegebenen Datei liest und ihre inverse Zahl druckt.
\begin{enumerate}[label=\textbf{\alph*)}]
\item Erst führe den Skript mit einem nicht existiernden Dateiname aus und dann mit dem Namen einer Datei, die ein Null- ($0$)-Zeichen enthält. Was passiert?
\item Ändere den Skript so, dass er nicht terminiert, wenn er den Namen einer nicht-existierende Datei als argument kriegt, sondern eine Fehlermeldung druckt.
\sitem Dazu sollte der Skript verschiedene Fehlermeldungen für die verschiedene Fehler drucken (löse die Fehler beim Varieren der Dateiinhalt oder des Dateiname aus).
\sitem Füge eine Handlung hinzu, die ausgeführt wird, wenn ein Fehler auftritt, den die andere \texttt{except}-Anweisungen nicht gefangen haben.
\sitem Füge eine Handlung hinzu, die bei jeder Ausführung von \texttt{try} ausgeführt wird.
\end{enumerate}
\vspace{0.5cm}
\ChapterNoNum{Objectorientierung (OOP)}
\Chapter{Klassen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Programm, welches ein einfaches Spielbrett zeichnet und dafür abwechselnd eine \texttt{ungerade\_Zeile}- (mit Strichen) und eine \texttt{gerade\_Zeile}-
(mit vertikalen Balken) über eine Funktion erzeugt.
\sitem Write a class to implement a Fibonacci iterator. Assuming your class is called \texttt{fib\_iter}, the following \texttt{for}-loop:
\begin{lstlisting}
for i in fib_iter(500):
print(i, end=' ')
\end{lstlisting}
should return all Fibonacci numbers up to \texttt{500}:
\begin{lstlisting}
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
\end{lstlisting}
{\color{Blue}Theory: }To conform to the paradigm of the Python iterator, the class needs
to implement an \texttt{\_\_iter\_\_} method (usully returning \texttt{self}) and a
\texttt{\_\_next\_\_} method, which defines what is returned at each iteration and when
the loop should be exited by raising a \texttt{StopIteration} exception. The
\texttt{for} loop creates an iterator by calling behind the scenes the \texttt{\_\_iter\_\_} method
and then calles the \texttt{\_\_next\_\_} method at each iteration.
\sitem Instantiate an object of \texttt{fib\_iter} and display the value of its members after
manually calling \texttt{object.\_\_next\_\_()}.
\sitem Add a \textit{docstring} to the class and its methods.
\sitem Similiarly, you can create your own collection class by following the collection protocol.
Create a class representing a collection of files in a directory in form of a dictionary, where keys are the filenames of the files contained in the directory and values are the corresponding contents.\\
%http://zesty.ca/bc/explore-11.html
{\color{Blue}Theory: }To conform to the collection protocol define the following methods:
\texttt{x.\_\_len\_\_()} for \texttt{len(x)} \\
\texttt{x.\_\_getitem\_\_(i)} for \texttt{x[i]} \\
\texttt{x.\_\_setitem\_\_(i, y)} for \texttt{x[i] = y} \\
\texttt{x.\_\_delitem\_\_(i)} for \texttt{del x[i]} \\
\texttt{x.\_\_contains\_\_(y)} for \texttt{y in x}.
\end{enumerate}
%\Chapter{Klassen und Objekte}
\vspace{0.5cm}
\ChapterNoNum{Libraries}
Python provides a very rich standard library and a huge set of other libraries for specific uses. These are usually available as packages which you might need to explicitly install on your system.
For the exercises below, for example, you are supposed to use the \texttt{matplotlib} library for plotting and producing figures and the \texttt{numpy} library for generating Funktions and dealing with arrays.
\Chapter{Plots and Histograms}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Plot the Funktions $sin(x)$ and $cos(x)$ in the range $[0,4]$ .
\Hint{Use the \texttt{sin} and \texttt{cos} Funktions for the $y$-axis and the \texttt{arange} Funktion for the $x$-axis from the \texttt{numpy} package.}
\sitem Plot the Funktion $f(x) = 1 + sin(3x)$ in the range $[0,4]$ labelling the axis and adding a grid.
\Hint{Use the \texttt{pyplot.subplots} Funktion from the package \texttt{matplotlib} and \texttt{sin} from \texttt{numpy}.}
%https://matplotlib.org/gallery/lines_bars_and_markers/simple_plot.html#sphx-glr-gallery-lines-bars-and-markers-simple-plot-py
\sitem Plot an histogram with the distribution of births per month from exercise \ref{Dictionaries}.\ref{3}.
\Hint{Use the \texttt{pyplot.hist} Funktion from the module \texttt{matplotlib}. The bins argument is a list of bin edges, included first and last, thus thirteen edges for twelve bins.}
%https://matplotlib.org/gallery/statistics/histogram_features.html
\sitem Histogram a randomly generated distribution around a gaussian and add a best fit line.
\Hint{Use the \texttt{np.random.randn} to generate the distribution.}
\end{enumerate}
\Chapter{Graphen, Histogrammen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Plotte ein Histogramm der Häufigkeit pro Monat von Geburtsdaten von der Übung oben.
\end{enumerate}
\end{document}
......@@ -165,7 +165,7 @@ $\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblks
\Example{``\texttt{I like this color}'' should give ``\texttt{color I like this}''}
\sitem Make a minimal example showing the effect of defining a variable inside a function with or without the keyword \texttt{global}.
\sitem Write a function taking one positional argument plus unnamed and named arguments and call it with three unnamed and two named arguments.
\Hint{Use the standard syntax \lstinline{f(a, *args, **kwargs)} and inside the function access the unnamed arguments from the list \texttt{args} and the named ones from the dictionary \texttt{kwargs}.}
\Hint{Use the standard syntax \lstinline{f(a, *args, **kwargs)} and inside the function access the unnamed arguments from the tuple \texttt{args} and the named ones from the dictionary \texttt{kwargs}.}
\end{enumerate}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment