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

Further translate Python exercises into German

Should be reviewed by a native speaker.
parent afde13ca
......@@ -15,10 +15,8 @@
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
%\rhead{Wissenschaftliche IT}
\rhead{\thepage}
\lhead{Python Übungen für Praktikanten}
%\rfoot{Page \thepage}
\lhead{Python Aufgaben für Praktikanten}
\newcommand{\Hint}[1]{{\\ \color{Blue} Hinweis:} #1}
\newcommand{\HintN}[2]{{\\ \color{Blue} Hinweis #1:} #2}
......@@ -31,7 +29,8 @@
\renewcommand\labelitemi{-}
% for item labels prefixed with an asterisk
\newcommand{\sitem}[1][black]{\stepcounter{enumi}\item[\color{#1}$\bm{*}$\,\textbf{\theenumi}]}
%\newcommand{\sitem}[1][black]{\stepcounter{enumi}\item[\color{#1}$\bm{*}$\,\textbf{\theenumi}]}
\newcommand{\sitem}{\stepcounter{enumi}\item[$\bm{*}$\,\textbf{\theenumi}]}
\begin{document}
\lstset{language=Python, basicstyle=\small\ttfamily, showstringspaces=false}
......@@ -95,15 +94,14 @@ Du solltest wissen, welche Hauptunterschieden unter \texttt{list}s, \texttt{tupl
\item Welche von dieser Methoden erlauben eine Liste als \textit{stack} (oder \textit{LIFO}: Last In First Out) zu benutzen?
\sitem Listen können nicht gut als \textit{queue} (oder \textit{FIFO}: First In First Out) verwendet werden. Warum?
\Note{Dafür kann man die Datenstruktur \texttt{collections.deque} benutzen, die eine \texttt{popleft}-Methode zur Verfügung stellt.}
%\begin{enumerate}[label=\textbf{\alph*)}]
\sitem Schreibe ein Programm, welches zehn Zahlen, welche vom Terminal eingegeben werden, in eine Liste packt und alle geraden Zahlen aus dieser Liste ausgibt.
\Hint{``\textit{list comprehension}'' benutzen.}
\item Schreibe ein Programm, welches die Worte eines Satzes, der im Terminal eingegeben wird, in umgekehrter Reihenfolge wieder ausgibt.
\Hint{Benutze \texttt{[::-1]} als besondere ``\textit{extended slice syntax}''. Alternativ die \texttt{reverse}-Funktion von \texttt{list}-Objekten.}
\Example{``\texttt{Ich liebe diese Farbe}'' soll zu ``\texttt{Farbe diese liebe Ich}'' werden.}
\item \label{1} Schreibe ein Programm, welches alle Worte eines Satzes, der im Terminal eingegeben wird, in umgekehrter alphabetischer Ordnung ausgibt.
\item \label{rsort} Schreibe ein Programm, welches alle Worte eines Satzes, der im Terminal eingegeben wird, in umgekehrter alphabetischer Ordnung ausgibt.
\Example{Der vorherige Beispiel soll ``\lstinline{Farbe Ich diese liebe}'' werden.}
\sitem \label{2} Wie in der vorherigen Übung (\ref{Listen}.\ref{1}), aber Groß- und Kleinschreibung werden nicht unterschieden. \Hint{\texttt{str.lower} kann als ``\texttt{key=}''-Argument von \texttt{sort} or \texttt{sorted} gegeben werden.}
\item \label{irsort} Wie in der vorherigen Übung (\ref{Listen}.\ref{rsort}), aber Groß- und Kleinschreibung werden nicht unterschieden. \Hint{\texttt{str.lower} kann als ``\texttt{key=}''-Argument von \texttt{sort} or \texttt{sorted} gegeben werden.}
\Example{Der vorherige Beispiel soll ``\lstinline{diese Farbe Ich liebe}'' werden.}
\end{enumerate}
......@@ -117,7 +115,7 @@ Du solltest wissen, welche Hauptunterschieden unter \texttt{list}s, \texttt{tupl
\item feststellen, ob der Dictionary ein Paar mit einem gewissenem Schlüssel enthält
\item über die Elementen des Dictionaries iterieren
\end{itemize}
\item \label{3} Schreibe ein Programm, welches ein Dictionary mit zehn (Name - Geburtsmonate) Schlüssel-Wert-Paaren füllt, die der User eingibt. Das Programm gibt die Geburtsmonate für den vom User über das Terminal gewählten Namen aus.
\item \label{birthmonth} Schreibe ein Programm, welches ein Dictionary mit zehn (Name - Geburtsmonate) Schlüssel-Wert-Paaren füllt, die der User eingibt. Das Programm gibt die Geburtsmonate für den vom User über das Terminal gewählten Namen aus.
\end{enumerate}
\vspace{0.5cm}
......@@ -162,7 +160,7 @@ $\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhts
$\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.
\sitem Wie in der Aufgabe \ref{Listen}.\ref{irsort} 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.
......@@ -172,7 +170,7 @@ $\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblks
\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 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{rsort} und \ref{Listen}.\ref{irsort}).
\item Von einem Skript oder einer interaktiven Shell importiere das Modul mit:
\begin{enumerate}[label=\textbf{\roman*)}]
\item \texttt{import alphasort}
......@@ -203,53 +201,57 @@ Schreibe einen kleinen Skript -- \texttt{inverse.py} -- (oder eine Funktion -- \
\Chapter{Klassen}
\begin{enumerate}[label=\textbf{\alph*)}]
\sitem Write a class to implement a Fibonacci iterator. Assuming your class is called \texttt{fib\_iter}, the following \texttt{for}-loop:
\item \label{fibo} Schreibe eine Klasse um einen Fibonacci-Iterator umzusetzen. In der Annahme, dass er \texttt{fib\_iter} heisst, die folgende \texttt{for}-Schleife:
\begin{lstlisting}
for i in fib_iter(500):
print(i, end=' ')
\end{lstlisting}
should return all Fibonacci numbers up to \texttt{500}:
sollte die Fibonacci-Folge bis \texttt{500} zurückgeben:
\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.\\
{\color{Blue}Anmerkung: }Um sich dem Paradigma eines Python-Iterator anzupassen, muss die Klasse Folgendes implementieren:
\begin{enumerate}
\item eine \texttt{\_\_iter\_\_}-Methode, die am bestens \texttt{self} zurückgibt, und
\item eine \texttt{\_\_next\_\_}-Methode, die definiert, was bei jeder Iteration zurückgegeben wird, und durch das Auslösen einer \texttt{StopIteration}-Ausnahme entscheidet, wenn die Schleife beendet werden soll.
\end{enumerate}
In der Tat hinter den Kulissen erst stellt die \texttt{for}-Schleife durch das Aufrufen von der \texttt{\_\_iter\_\_}-Methode einen Iterator her, und dann ruft sie die \texttt{\_\_next\_\_}-Methode bei jeder Iteration.
\sitem Instantiiere ein \texttt{fib\_iter}-Object und lass es die Werte seiner Members zeigen nachdem Du \texttt{object.\_\_next\_\_()} manuell aufgerufen hast.
\sitem Füge eine Dokumentation-String zu der Klasse und ihren Methoden hinzu.
\sitem Ähnlich wie für eine Iterator-Klasse bei der Aufgabe \ref{Klassen}.\ref{fibo} kann man seine eigene collection Klasse schreiben, wenn man sich dem Python-Paradigma einer Collection anpasst.
Setze eine Klasse um, die eine Collection von Dateien in einem Verzeichnis als Dictionary darstellt, wo die Schlüssel die Dateinamen der Dateien in dem Verzeichnis sind und die Werte die entsprechende Inhalte sind.\\
%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}.
{\color{Blue}Anmerkung: }Um sich dem Paradigma eines Python-Collection anzupassen, soll die Klasse folgende Methoden implementieren:\\
\begin{center}
\begin{tabular}{c | c}
Methode & benutz von \\ \hline
\texttt{x.\_\_len\_\_()} & \texttt{len(x)} \\
\texttt{x.\_\_getitem\_\_(i)} & \texttt{x[i]} \\
\texttt{x.\_\_setitem\_\_(i, y)} & \texttt{x[i] = y} \\
\texttt{x.\_\_delitem\_\_(i)} & \texttt{del x[i]} \\
\texttt{x.\_\_contains\_\_(y)} & \texttt{y in x}
\end{tabular}
\end{center}
\end{enumerate}
\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.
\ChapterNoNum{Bibliotheken}
Python stellt eine reiche Standardbibliothek und eine große Auswahl andere Bibliotheken zur Verfügung. Diese sind oft als System-Packete verfügbar, die erst explizit installiert werden sollen.
Zum Beispiel für die folgende Aufgaben solltest du die \texttt{matplotlib}-Bibliothek für Aufzeichnungen und die \texttt{numpy}-Bibliothek für array-basierte Berechnungen benutzen.
\Chapter{Plots and Histograms}
\Chapter{Graphen und Histogrammen}
\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}.}
\item Zeichne die Funktionen $sin(x)$ und $cos(x)$ im Intervall $[0,4]$.
\Hint{Von der \texttt{numpy}-Bibliothek benutze die \texttt{sin}- und \texttt{cos}-Funktionen für die $y$-Achse und die \texttt{arange}-Funktion für die $x$-Achse.}
\sitem Zeichne die Funktion $f(x) = 1 + sin(3x)$ in dem Intervall $[0,4]$, bezeichne die Achse und füge ein Diagram-Gitter hinzu.
\Hint{Benutze die \texttt{pyplot.subplots}-Funktion von \texttt{matplotlib} und die \texttt{sin}-Funktion von \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.}
\sitem Zeichne ein Balkendiagramm mit der Verteilung der Geburten für jede Monat von der Aufgabe \ref{Dictionaries (Assoziative Arrays)}.\ref{birthmonth}.
\Hint{Benutze die \texttt{pyplot.hist}-Funktion von \texttt{matplotlib}. Das \texttt{bins}-Argument ist eine Liste von Balkenextreme (erste und letzte einschließend, daher dreizehn Extreme für zwölf Balken.}
%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.}
\sitem Stelle mit einem Balkendiagramm eine Normalverteilung dar und füge eine 'best-fit'-Linie hinzu.
\Hint{Benutze die \texttt{np.random.randn}-Funktion um die Normalverteilung zu generieren.}
\end{enumerate}
\Chapter{Graphen, Histogrammen}
\begin{enumerate}[label=\textbf{\alph*)}]
......
......@@ -93,15 +93,14 @@ Make sure you know the main characteristics of \texttt{list}s, \texttt{tuple}s,
\item Which methods of the list above would help you using a list as a \textit{stack} (or \textit{LIFO}: Last In First Out)?
\sitem Lists are not good to be used as a \textit{queue} (or \textit{FIFO}: First In First Out). Why?
\Note{For that purpose you can use \texttt{collections.deque}, which provides a \texttt{popleft} method.}
%\begin{enumerate}[label=\textbf{\alph*)}]
\sitem Write a program that fills a list with ten integers taken as input from the terminal and returns only the even ones.
\Hint{Use a \textit{list comprehension}.}
\item Write a program which returns in reversed order the words of a sentence received as input.
\Hint{Use the ``\textit{extended slice syntax}'' \texttt{[::-1]}. Alternatively use the \texttt{reverse} function of list objects.}
\Example{``\texttt{I like this color}'' should give ``\texttt{color this like I}''.}
\item \label{1} Write a program which returns in alphabetical order the words of a sentence received as input.
\item \label{rsort} Write a program which returns in alphabetical order the words of a sentence received as input.
\Example{The previous example should give ``\lstinline{I color like this}''.}
\sitem \label{2} Like in the previous exercise (\ref{Lists}.\ref{1}) but case insensitive. \Hint{You can pass the \texttt{str.lower} function as ``\texttt{key=}'' argument of \texttt{sort} or \texttt{sorted}.}
\sitem \label{irsort} Like in the previous exercise (\ref{Lists}.\ref{rsort}) but case insensitive. \Hint{You can pass the \texttt{str.lower} function as ``\texttt{key=}'' argument of \texttt{sort} or \texttt{sorted}.}
\Example{The previous example should give ``\texttt{color I like this}''.}
\end{enumerate}
......@@ -115,7 +114,7 @@ Make sure you know the main characteristics of \texttt{list}s, \texttt{tuple}s,
\item check if the dictionary contains the pair with a given key
\item iterate over the elements of the dictionary
\end{itemize}
\item \label{3} Write a program that fills a dictionary with ten (name - birthday month) key-value pairs requested as input and prints out the month of birth for the names chosen by the user.
\item \label{birthmonth} Write a program that fills a dictionary with ten (name - birthday month) key-value pairs requested as input and prints out the month of birth for the names chosen by the user.
\end{enumerate}
\vspace{0.5cm}
......@@ -161,7 +160,7 @@ $\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhts
$\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare$
\end{minipage}
\sitem Write a \textit{docstring} for both of this functions and verify it gets called when it should (in an interactive Python shell) or call it explicitly with \texttt{.\_\_doc\_\_}
\sitem Like in exercise \ref{Lists}.\ref{2} but this time you are supposed to pass a \textit{lambda function} as ``\texttt{key=}'' argument of \texttt{sort} or \texttt{sorted}, using the \texttt{lower} function of a string object.
\sitem Like in exercise \ref{Lists}.\ref{irsort} but this time you are supposed to pass a \textit{lambda function} as ``\texttt{key=}'' argument of \texttt{sort} or \texttt{sorted}, using the \texttt{lower} function of a string object.
\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.
......@@ -171,7 +170,7 @@ $\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblksquare\lgwhtsquare\lgblks
\Chapter{Modules}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Create a module for alphabetical sorting (a file named \texttt{alphasort.py}) containing the two functions \texttt{sort} and \texttt{isort}: they take as argument a string, preferably made up of many words, and return a list of words alphabetically sorted, case insensitive in the case of the \texttt{isort} function (use the code from your own solutions of exercises \ref{Lists}.\ref{1} and \ref{Lists}.\ref{2}).
\item Create a module for alphabetical sorting (a file named \texttt{alphasort.py}) containing the two functions \texttt{sort} and \texttt{isort}: they take as argument a string, preferably made up of many words, and return a list of words alphabetically sorted, case insensitive in the case of the \texttt{isort} function (use the code from your own solutions of exercises \ref{Lists}.\ref{rsort} and \ref{Lists}.\ref{irsort}).
\item From a script or an interactive shell import the module in the following ways:
\begin{enumerate}[label=\textbf{\roman*)}]
\item \texttt{import alphasort}
......@@ -203,7 +202,7 @@ Write a small Python script -- \texttt{inverse.py} -- (or a function -- \texttt{
\Chapter{Classes}
\begin{enumerate}[label=\textbf{\alph*)}]
\sitem Write a class to implement a Fibonacci iterator. Assuming your class is called \texttt{fib\_iter}, the following \texttt{for}-loop:
\item \label{fibo} 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=' ')
......@@ -221,15 +220,20 @@ for i in fib_iter(500):
\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.
\sitem Similiarly to what seen for an iterator class in \ref{Classes}.\ref{fibo}, you can create your own \textit{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}.
\begin{center}
\begin{tabular}{c | c}
method & used by \\ \hline
\texttt{x.\_\_len\_\_()} & \texttt{len(x)} \\
\texttt{x.\_\_getitem\_\_(i)} & \texttt{x[i]} \\
\texttt{x.\_\_setitem\_\_(i, y)} & \texttt{x[i] = y} \\
\texttt{x.\_\_delitem\_\_(i)} & \texttt{del x[i]} \\
\texttt{x.\_\_contains\_\_(y)} & \texttt{y in x}
\end{tabular}
\end{center}
\end{enumerate}
......@@ -245,7 +249,7 @@ For the exercises below, for example, you are supposed to use the \texttt{matplo
\sitem Plot the function $f(x) = 1 + sin(3x)$ in the range $[0,4]$ labelling the axis and adding a grid.
\Hint{Use the \texttt{pyplot.subplots} function 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}.
\sitem Plot an histogram with the distribution of births per month from exercise \ref{Dictionaries}.\ref{birthmonth}.
\Hint{Use the \texttt{pyplot.hist} function 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.
......
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