aufgaben.tex 8.8 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
\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}