%&p
\begin{document}
\frame{\titlepage}

\section{Introduction}
\begin{frame}
	\frametitle{What is Python}
	\includegraphics[width=\linewidth]{2.png}
\end{frame}

\begin{frame}
	\frametitle{What is Python}
	\begin{itemize}
		\item Interpreted
		\item Duck-typing
		\item High-level
		\item Multi-paradigm
		\item \ldots
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
	\frametitle{How to start}
	\framesubtitle{Interpreter}
	\begin{minted}[breaklines=true]{pycon}
Python 3.5.1 (default, Dec  7 2015, 12:58:09)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more
information.
>>> print('Hello world!')
Hello world!
>>> i = 1972
>>> print(str(i/46) + ' hoi')
42.869565217391305 hoi
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{How to start}
	\framesubtitle{Source files}
	\begin{minted}{python}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

print('hello world')
i = 1972
print(str(i/46) + ' hoi')
	\end{minted}
\end{frame}

\section{Basics}
\begin{frame}[fragile]
	\frametitle{Built-in types}
	\begin{tabular}{ll}
		\mintinline{python}{bool} & \mintinline{python}{True, False}\\
		\mintinline{python}{int} & \mintinline{python}{1, -4, 999}\\
		\mintinline{python}{complex} & \mintinline{python}{4j+1, j}\\
		\mintinline{python}{float} & \mintinline{python}
			{1.0, 4.5, 5e9, float('NaN'), float('inf')}\\
		\mintinline{python}{str} & \mintinline{python}
			{'hi', "hi", '"', "'", """hi"""}\\
		\mintinline{python}{list} & \mintinline{python}
			{[], ..., [1, 2, 3], ['a', 42], [[], [1]]}\\
		\mintinline{python}{tuple} & \mintinline{python}
			{(1,), (1,2), (1, 'a', True), ((4, 3), 4)}\\
		\mintinline{python}{dict} & \mintinline{python}
			{{1: 'a', 2: 'b'}, {"hi": 42, "test": {}}, {}}\\
		\mintinline{python}{set} & \mintinline{python}
			{{1, 2}, {"hi", "a"}, set()}\\
		Others &  \mintinline{python}
			{range, bytes, bytearray, memoryview, frozenset}\\
		Special & \mintinline{python}
			{type, None, ..., NotImplemented}\\
	\end{tabular}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Basictypes: Operators}
	\begin{block}{operators}
		\begin{itemize}
			\item Numbers: \mintinline{python}{+ - / * // % @ **}
			\item Comparison: \mintinline{python}{< <= > >= == !=}
			\item Boolean: \mintinline{python}{and or not}
			\item Bitwise: \mintinline{python}{& | ^ ~ << >>}
			\item List/Dictionary: \mintinline{python}{[i] [i:j] in}
			\item In place: \mintinline{python}{*= += ...}
			\item Special: \mintinline{python}{is}
		\end{itemize}
	\end{block}
\end{frame}

\section{Control flow}
\subsection{If, then, else}
\begin{frame}[fragile]
	\frametitle{Conditional execution}
	\framesubtitle{\texttt{fizzbuzz.py}}
	\begin{minted}{python}
#!/usr/bin/env python3

i = int(input('Enter a number: '))
if i % 3 == 0 and i % 5 == 0:
    print('fizzbuzz')
elif i % 3 == 0:
    print('buzz')
elif i % 5 == 0:
    print('fizz')
else:
    print(i)
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Conditional execution 2}
	\framesubtitle{\texttt{fizzbuzz.py}}
	\begin{minted}{shell-session}
frobnicator@frobmachine~$ python fizzbuzz.py
Enter a number: 42
buzz
frobnicator@frobmachine~$ python fizzbuzz.py
Enter a number: 15
fizzbuzz
frobnicator@frobmachine~$ python fizzbuzz.py
Enter a number: 43
43
frobnicator@frobmachine~$ python fizzbuzz.py
Enter a number: 9
fizz
	\end{minted}
\end{frame}

\subsection{While, for}
\begin{frame}[fragile]
	\frametitle{Looping}
	\begin{minted}{python}
ls = ["hello", "world", "!"]

# Pythonic for loop
for item in ls:
    print(ls)

# C style for loop
for i in range(0, len(ls)):
    print(ls[i])

# While loop
i = 10
while i >= 0:
    print(i);
print('fire!')
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Looping: Escape rope}
	\begin{minted}{python}
# 100.000st prime, 100.001st prime, and a pseudoprime
numbers = [1299709, 1299721, 1299709*1299721]
for n in numbers:
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        print(n, 'is a prime number')

# 1299709 is a prime number
# 1299721 is a prime number
# 1689259081189 equals 1299709 * 1299721

# pass, continue
	\end{minted}
\end{frame}

\subsection{Functions}
\begin{frame}[fragile]
	\frametitle{Functions}
	\begin{minted}{python}
def fizzbuzzrange(n, m):
    """Print fizzbuzz for all numbers between n and m"""
    for i in range(n, m):
        fizzbuzz(i)

def fizzbuzz(n):
    """Print for number i the fizzbuzz"""
    if i % 3 == 0 and i % 5 == 0:
        print('fizzbuzz')
    elif i % 3 == 0:
        print('buzz')
    elif i % 5 == 0:
        print('fizz')
    else:
        print(i)

fizzbuzzrange(0, 1000)
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Functions: Advanced arguments}
	\begin{minted}{python}
def function(arg1, arg2, kwarg1="hi", kwarg2=42):
    """Docstring,
	run help(functionname) in the interpreter
	to see this helpstring
	"""
    pass

def function(*args):
    for i, a in enumerate(args):
        print("argument: ", i, ": ", a)

def function(**kwargs):
    for k, v in kwargs:
        print("argumentkey: ", k, "=", v)

def function(arg1, arg2, arg3=4, *args, **kwargs):
    pass
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Functions: Advanced functions}
	\begin{minted}{python}
def compare(this, that, comparefunc=lambda x, y: x > y):
    return comparefunc(this, that)
	\end{minted}
	\begin{minted}{pycon}
>>> compare(42, 2)
True
>>> compare(42, 2, lambda x, y: x < y)
False
>>> def compare_len(x, y):
...     return len(x) > len(y)
...
>>> print(compare_len)
<function compare_list at 0x7f075cd5b730>
>>> compare([1, 2, 3, 4], [3, 4, 5])
False
>>> compare([1, 2, 3, 4], [3, 4, 5], compare_len)
True
	\end{minted}
\end{frame}

\section{Datastructures}
\begin{frame}
	\frametitle{Lists}
	\begin{tabular}{ll}
		In-situ & Copy\\
		\mintinline{python}{lst.append(x)}\\
		\mintinline{python}{lst.extend(x)} &
			\mintinline{python}{lst1 + lst2}\\
		\mintinline{python}{lst.insert(i, x)}\\
		\mintinline{python}{lst.remove(x)}\\
		\mintinline{python}{lst.clear(x)} &
			\mintinline{python}{lst = []}\\
		\mintinline{python}{lst.reverse(x)} &
			\mintinline{python}{reverse(lst)}\\
		\ldots
	\end{tabular}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Sequences}
	\begin{block}{Tuples}
		\begin{minted}{python}
# Auto unpack
x = (42, 43)
x1, x2 = x
		\end{minted}
	\end{block}

	\begin{block}{Sequence modifiers}
		\begin{minted}{python}
x = {3, 2, 1}
lx = list(x)       # items in random order
sx = sorted(x)     # [1, 2, 3]
rx = reversed(sx)  # [3, 2, 1]
rx = enumerate(rx) # [(0, 3), (1, 2), (2, 1)]
		\end{minted}
	\end{block}
\end{frame}

\section{Input/Output}
\begin{frame}[fragile]
	\frametitle{Strings}
	\begin{minted}{pycon}
>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
>>> print(s)
The value of x is 32.5, and y is 40000...
>>> hello = 'hello, world\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, world\n'
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{String formatting}
	\begin{minted}{python}
'We are the {} who say "{}!"'.format('knights', 'Ni')
# We are the knights who say "Ni!"

'{0} {0} {1}'.format('ekke', 'ptang')
# ekke ekke ptang

# Number formatting and padding
'{0:.3f} {1:03d} "{2:<5}" "{2:,>5}"'.format(
	1.0/3, 42, 'hi')
# '0.333 042 "hi   " ",,,hi"

# Other Usefull string function
','.join(['a', 'b', 'c'])
'a,b,c'.split(',')
	\end{minted}
\end{frame}

\section{And much more\ldots}
\begin{frame}[fragile]
	\frametitle{Error handling}
	\begin{minted}{python}
try:
    x = 5/0
except ZeroDivisionError as e:
    print(e)

try:
    do_some_stuff()
except:
    rollback()
    raise
else:
    commit()
finally:
    cleanup()
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Libraries}
	\mintinline{python}{import modulename}\\
	\mintinline{python}{from modulename import name1, name2}\\
	\begin{enumerate}
		\item System: \mintinline{python}{os, sys, glob}
		\item Math: \mintinline{python}{math, random, statistics}
		\item Text: \mintinline{python}{re, locale, gettext, codecs}
		\item Internet: \mintinline{python}{irllib, email, smtplib, poplib}
		\item Data: \mintinline{python}{sqlite, json, csv, xml.etree}
		\item Command line:
			\mintinline{python}{curses, urwid, readline, getopts, argparse}
		\item GUI: \mintinline{python}{Tkinter, PySide/PyQt, PyGobject}
		\item \ldots
	\end{enumerate}
\end{frame}

\begin{frame}[fragile]
	\frametitle{And much more\ldots}
	\begin{itemize}
		\item Function annotations: \mintinline{python}{def fun(n) -> str:}
		\item Iteration through: \mintinline{python}{yield}
		\item List comprehension: 
			\mintinline{python}{[x**2 for x in range(0, 5)]}
		\item Functional style: \mintinline{python}{map, filter, reduce}
		\item Classes, inheritance: \mintinline{python}{class}
		\item Context blocks: \mintinline{python}{with}
		\item String templating
		\item Coding style: \url{https://www.python.org/dev/peps/pep-0008/}
	\end{itemize}
\end{frame}
\end{document}
