#!/usr/bin/env python
# coding: utf-8

# # Lektion 1
# ## Python als Taschenrechner

# In[1]:


1+3     # Addition  (Kommentare kann man mit '#' einfügen)


# In[2]:


2*3+3


# In[3]:


27/4    # Division


# In[4]:


27//4   # ganzzahlige Division 


# In[5]:


27 % 4  # modulo


# 
# Python nutzt $+, -, *, /$ für die Grundrechenarten, $**$ zum Potenzieren und $\%$ für Modulo Rechnungen.
# 
# 
# 
# 

# In[6]:


2**3    # Potenz


# In[7]:


pow(2, 3)


# In[8]:


get_ipython().run_line_magic('pinfo', ' pow')


# ## Variablen
# Variablen sind nützlich, um zum Beispiel Werte zu speichern. Das '=' ist hier kein mathematisches Gleichheitszeichen, sondern dient dazu einer Variablen einen Wert zuzuweisen. Variablennamen sind Zeichenketten, die mit einem Buchstaben anfangen müssen. Als Sonderzeichen ist nur _ (underscore) erlaubt.
# ## Zahlen
# #### ganze Zahl (integer)

# In[9]:


a_ganze_zahl = 2


# 
# #### Gleitkommazahl (float)
# 
# 
# 
# 

# In[10]:


b_gleitkomma_zahl = 3.
type(b_gleitkomma_zahl) # type ist eine eingebaute Funktion, die den Datentyp anzeigt


# In[11]:


a = 2
b = 3.
c = a*b


# In[12]:


c = a*b/5


# In[13]:


print(c)


# ####  komplexe Zahlen 
# die imaginäre Einheit ist nicht i, sondern 1j, d.h. '1j**2=-1')

# In[14]:


1+1j


# Verwirren Sie Python nicht, indem Sie die Namen eingebauter Funktionen (built-in) als Variablennamen verwenden. 
# 
# Liste der built-in Funktionen https://docs.python.org/3/library/functions.html

# In[15]:


print = 2


# 
# #### Zeichenketten (engl. strings)
# 
# 
# 
# 

# In[16]:


txt_var = 'Hallo, Welt.'
txt_var


# In[17]:


txt_var_2 = 'Hello, world!'
txt_var_2


# In[18]:


print(txt_var, txt_var_2)


# In[19]:


del print # Alles wieder gut :)


# In[20]:


print(txt_var, txt_var_2)


# In[21]:


txt_var[0::2]


# In[22]:


txt_var[-5]


# 
# 
# 
# 
# 
# ## Listen (engl. list)
# 
# 
# 
# 

# In[23]:


leere_liste = list()
leere_liste


# In[24]:


noch_eine_leere_liste = []
noch_eine_leere_liste


# In[25]:


liste_mit_nullen = [0] * 5


# In[26]:


liste_mit_nullen


# In[27]:


leere_liste.append(1)


# In[28]:


print(leere_liste)


# In[29]:


leere_liste.append('doc')
print(leere_liste)


# In[30]:


len(leere_liste)


# ### Zugriff auf Elemente einer Liste (Indexzugriff)

# In[31]:


liste = [-1, 1, 2, 3, 44, 5, 6, 7]
liste


# In[32]:


liste[4]


# Python fängt bei $0$ mit dem Zählen an

# In[33]:


liste[0]


# In[34]:


liste[4:7] # liste[start:ende]


# Achtung! Das "ende" ist exklusiv.

# In[35]:


liste[0:4:2] # liste[start:ende:increment]


# In[36]:


liste[-2]  # das vorletzte Element


# In[37]:


liste[::-1]


# In[38]:


liste_von_listen = [[1, 2], [3, 4]]
liste_von_listen


# In[39]:


liste_von_listen[1][1]


# 
# ## Dictionaries (Wörterbücher)
# 
# 

# In[40]:


leeres_dict = dict()
leeres_dict


# In[41]:


noch_ein_leeres_dict = {}


# In[42]:


ein_dict = {2: "Hallo ", 3: 'Donald'}  # Schlüssel-Werte Paare


# Zugriff auf Inhalt des Dictionaries und aneinanderkleben von Strings

# In[43]:


ein_dict[2] + ein_dict[3] + '!'


# ### .. Dictionaries

# In[44]:


ein_dict = {2: "Hallo ", 3: 'Donald'}


# In[45]:


ein_dict['s'] = '43' # neuer Eintrag mit Schlüssel 's'
ein_dict


# In[46]:


print(ein_dict)


# In[47]:


del ein_dict[3] # Löscht den Eintrag mit Schlüssel 3


# In[48]:


print(ein_dict)


# In[49]:


ein_dict['s']


# ## Tupel

# In[50]:


leeres_tupel = ()
leeres_tupel


# In[51]:


lt = tuple()
lt


# In[52]:


tp = ('tupel', 'lassen', 'sich', 'nicht', 'aendern')
tp


# In[53]:


tp[0] = 'Tupel'


# ## Mengen

# In[54]:


leere_menge = set()
leere_menge


# In[55]:


staedte = {'Duesseldorf', 'Berlin', 'Muenchen', 'Schalke', "Dortmund"}


# In[56]:


'Berlin' in staedte # Ist Element in Menge enthalten?


# In[57]:


staedte2 = {'Berlin', 'Hamburg'}


# In[58]:


staedte | staedte2  # Vereinigung 'union'


# ## Kopieren

# In[59]:


a = 1
a


# In[60]:


b = a
b


# In[61]:


id(a) , id(b) # a und b haben dieselbe Identität


# In[62]:


a = 2
a


# In[63]:


b


# In[64]:


id(a), id(b)


# ## Kopieren II

# In[65]:


al = [1, [2, 3]]


# In[66]:


bl = al


# In[67]:


bl[1][0] = "Hallo"


# In[68]:


al


# In[69]:


cl = al[:]
cl


# In[70]:


cl[0] = 42
cl


# In[71]:


al


# In[72]:


cl[1][0] = 2018
cl


# In[73]:


al

