Commit 42f31dac authored by Raffaele Grosso's avatar Raffaele Grosso
Browse files

Python exercises (deutsche Version)

parent de7240ec
\documentclass[10pt,a4paper]{letter}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{enumitem}
\usepackage{bm}
\usepackage[margin=4.2cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{relsize}
\usepackage{listings}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
%\rhead{Wissenschaftliche IT}
\rhead{\thepage}
\lhead{Python Übungen für Praktikanten}
%\rfoot{Page \thepage}
\newcommand{\Hint}[1]{{\\ \color{Blue} Hinweis:} #1}
\newcommand{\HintN}[2]{{\\ \color{Blue} Hinweis #1:} #2}
\newcommand{\Note}[1]{{\\ \color{Blue} Anmerkung:} #1}
\newcommand{\Example}[1]{{\\ \color{Blue} Beispiel:} #1}
\newcounter{ChapterCounter}
\newcommand{\Chapter}[1]{\refstepcounter{ChapterCounter}\textbf{\theChapterCounter. #1} \label{#1}}
\newcommand{\ChapterNoNum}[1]{\begin{center}\textbf{#1}\end{center} \label{#1}}
\renewcommand\labelitemi{-}
% for item labels prefixed with an asterisk
\newcommand{\sitem}[1][black]{\stepcounter{enumi}\item[\color{#1}$\bm{*}$\,\textbf{\theenumi}]}
\begin{document}
\lstset{language=Python, basicstyle=\small\ttfamily, showstringspaces=false}
\noindent\fbox{%
\parbox{\textwidth}{%
\begin{itemize}
\item[$\rightarrow$] Hinweise und Anmerkungen beziehen sich auf Python 3.
\item[$\rightarrow$] Besonders schwierige Aufgaben sind mit einem Sternchen markiert. Diese Aufgaben können erst übersprungen werden, wenn sie überfordernd sind.
\end{itemize}
}%
}
\ChapterNoNum{Präliminarien}
Zeichenketten verarbeiten, formatieren und drucken. Werte vom stdin in eine Variable speichern. Eine Module importieren. Den Typ einer Variable bestätigen.
\Chapter{Zeichenketten (Strings)}
\begin{enumerate}[label=\textbf{\alph*)}]
\item In einer interaktiven Python-Shell Folgendes versuchen:
\begin{itemize}
\item zwei Zeichenketten in einer einzigen verketten
\item eine Zeichenkette \texttt{n} Mal ``multiplizieren''
\item eine Zeichenkette vergrößern
\item eine unter-Zeichenkette in einer Zeichenkette finden
\item ein Zeichen in einer gewissenen Stelle einer Zeichenkette extrahieren
\item eine Scheibe der Zeichenkette extrahieren (\textit{to slice}), z.B. von der Stelle \texttt{m} bis zur Stelle \texttt{n}
\end{itemize}
\end{enumerate}
\Chapter{Vom Prompt lesen - Zeichenketten verarbeiten}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Hallo-Welt-Programm, d.h. ein Programm, das nur \lstinline{"Hallo Welt!"} druckt.
\item Schreibe ein Programm, welches den User nach seinem Name und Geburtsjahr fragt und folgenden Text ausgibt: \lstinline{"Hallo NAME, du wirst dieses Jahr X Jahre alt"}.
\HintN{1}{In Python 3 die \texttt{input}-Function nimmt als Argument eine Zeichenkette, die dem User gezeigt wird, und gibt was er tippt als Zeichenkette zurück. Umwandeln falls nötig.}
\HintN{2}{Um das laufende Jahr nicht fest zu codieren, die entsprechende Funktion von der \texttt{datetime}-Module soll benutzt werden und daher diese Module soll \texttt{import}iert werden.}
\\{\color{Blue} Hinweis 3:} Um Variabeln in Zeichenketten zu formatieren gibt es verschiedene Methoden. Versuche die folgende Möglichkeiten:
\begin{lstlisting}[language=Python]
f"var1: {var1} var2: {var2}"
"var1: {0:8s} var2: {1:4.2f}".format(var1, var2)
"var1: %s var2: %d" % (var1, var2)
\end{lstlisting}
\end{enumerate}
\vspace{0.5cm}
\ChapterNoNum{Datenstrukturen}
Du solltest wissen, welche Hauptunterschieden unter \texttt{list}s, \texttt{tuple}s, \texttt{set}s und \texttt{dict}ionaries es gibt.
\Chapter{Listen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Du hast schon etwas von Listen gelernt, wenn du mit Zeichenketten gearbeitet hast, weil sie Listen von Zeichen sind. Stelle es fest, dass du auch Folgendes kannst:
\begin{itemize}
\item ein Element zu einer List hinzufügen
\item die Elemente einer Liste einer anderen Liste hinzufügen
\item ein Element an einer gewissenen Stelle hinzufügen (von einer gewissenen Stelle löschen)
\item das letzte Element zurückgeben und von der Liste löschen
\item die Liste sortieren und die Reihenfolge der Elementen umkehren
\end{itemize}
\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.
\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.}
\Example{Der vorherige Beispiel soll ``\lstinline{diese Farbe Ich liebe}'' werden.}
\end{enumerate}
\Chapter{Dictionaries (Assoziative Arrays)}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Stelle sicher, dass Du folgendes kannst:
\begin{itemize}
\item ein Dictionary (mit \texttt{\{\}} und mit \texttt{dict()}) instanzieren
\item ein Element (Schlüssel-Wert-Paar) von einem Dictionary löschen, zu einem Dictionary hinzufügen
\item den Wert kriegen, der mit einem beliebigen Schlüssel assoziert ist
\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.
\end{enumerate}
\vspace{0.5cm}
\ChapterNoNum{Ablaufsteuerung}
Schlüsselworte wie \texttt{if}, \texttt{else}, \texttt{while}, \texttt{for}, \texttt{pass}, \texttt{break}, \ldots erlauben, den Ablauf von Anweisungen zu steuern. Kannst Du sie benutzen?
\Chapter{Verzweigungen und Schleifen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Stelle sicher, dass Du korrekt \texttt{if-elif-else}-Verzweigungen benutzen kannst.
\item Stelle sicher, dass Du korrekt \texttt{for}- und \texttt{while}-Schleifen benutzen kannst, insbesondere das ``\texttt{for i in}''-Konstrukt mit \texttt{range()} oder mit einem Iterierbar.
\item Liste die Kommandozeilenparameter deines Skripts.
\Hint{Wenn du die \texttt{sys}-Module auflädst, \texttt{sys.argv} ist eine Liste, die die Kommandozeilenparameter enthält.}
\item Schreibe ein Ratespiel: Lasse den User eine zufällig generierte Zahl zwischen 0 und 9 raten, bis der User "exit" eingibt oder er die Zahl richtig geraten hat.
\end{enumerate}
\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.
\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}
\Chapter{Funktionen}
\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.
\end{enumerate}
%\Chapter{Klassen und Objekte}
\end{document}
\documentclass[10pt,a4paper]{letter}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{amsmath}
\usepackage{enumitem}
\usepackage[margin=4.2cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{relsize}
\newcommand{\Hinweis}[1]{{\color{Blue} Hinweis:} #1}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
%\rhead{Wissenschaftliche IT}
\rhead{Übungen}
\lhead{Python Übungen für Praktikanten}
%\rfoot{Page \thepage}
\newcounter{AufgabeZaehler}
\newcommand{\Aufgabe}[1]{\stepcounter{AufgabeZaehler}\textbf{Aufgabe \theAufgabeZaehler: #1}\\}
\begin{document}
%Folgende Programme schreiben und ausführen:
%
\Aufgabe{Python-Hallo-Welt}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Hallo-Welt-Programm.
\item Schreibe ein Programm, welches den User nach seinem Name und Geburtsjahr fragt und folgenden Text ausgibt \texttt{"Hallo NAME, du wirst dieses Jahr X Jahre alt"}.
\end{enumerate}
\Aufgabe{Liste, Dictionaries, Schleifen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Programm, welches zehn Zahlen, welche vom Terminal eingegeben werden, in eine Liste packt und alle geraden Zahlen aus dieser Liste ausgibt.
\Hinweis{``\textit{list comprehension}'' benutzen.}
\item Schreibe ein Programm, welches die Worte eines Satzes, der im Terminal eingegeben wird, in umgekehrter Reihenfolge wieder ausgibt. \Hinweis{Benutze \texttt{[::-1]} als besondere ``\textit{extended slice syntax}''. Alternativ die \texttt{reverse}-Funktion von der Liste.}
\\ {\color{Blue} Beispiel:} ``\textit{Das ist ein Haus.}'' wird zu ``\textit{Haus ein ist Das.}''
\item Schreibe ein Programm, welches alle Worte eines Satzes, der im Terminal eingegeben wird, in umgekehrter alphabetischer Ordnung ausgibt.
\item Wie in der vorherigen Übung, aber Groß- und Kleinschreibung werden nicht unterschieden. \Hinweis{\texttt{sort} oder \texttt{sorted} können als ``\texttt{key=}'' Argument eine Lambda-Funktion gegeben werden \ldots}
\item Schreibe ein Programm, welches ein Schlüsselwert-Verzeichnis (\textit{dictionary}) mit z.B. zehn Name => Geburtsmonate Schlüssel-Wert-Paaren enthält. Das Programm
gibt die Geburtsmonate für den vom User über das Terminal gewählten Namen aus.
\end{enumerate}
\Aufgabe{Bedingungen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Ratespiel: Lasse den User eine zufällig generierte Zahl zwischen 0 und 9 raten, bis der User "exit" eingibt oder er die Zahl richtig geraten hat.
\end{enumerate}
\Aufgabe{I/O}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Schreibe ein Programm, das einen 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.
\item Erweitere 2 d): Das Programm soll die Schlüsselwert-Paare aus einer Datei im json-Format lesen. Biete dem User an, über das Terminal andere Paar hinzuzufügen und schreibe das neue Schlüsselwert-Verzeichnis in die selbe json-Datei.
\end{enumerate}
\Aufgabe{Graphen, Histogrammen}
\begin{enumerate}[label=\textbf{\alph*)}]
\item Plotte ein Histogramm der Häufigkeit pro Monat von Geburtsdaten von der Übung oben.
\end{enumerate}
\Aufgabe{Funktionen}
\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.
\end{enumerate}
%\Aufgabe{Klassen und Objekte}
\end{document}
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