# 2. Einführung in die Programmierung für Nicht Informatiker*innen¶

Bitte ihre Jupyter Kennung + Vor- & Nachnamen unter folgendem link eintragen survey

## Beispiele Print¶

In [1]:

    # Beispiel Print
    print("Hallo", "Python", end='\n') # Zeigen wie end Funktioniert
    print("Freitag 15h") # Ausgabe mittels print

    Hallo Python
    Freitag 15h

In [2]:

    "Hallo Python" # direkte ausgabe einer Variablen oder Wert

Out[2]:

    'Hallo Python'

In [3]:

    432423654645

Out[3]:

    432423654645

## Variablen zuweisungen¶

In [4]:

    zahl1 = 42 # 'zahl1' speichert den Wert '42'
    zahl1

Out[4]:

    42

In [5]:

    print(zahl1) # Ausgabe der Variabeln mittels print

    42

In [6]:

    zahl2 = 420
    zahl2

Out[6]:

    420

## Operationen mit Integern (gilt auch für Floats)¶

In [7]:

    zahl1 + zahl2 # Addition

Out[7]:

    462

In [8]:

    zahl1 - zahl2 # Subtraction

Out[8]:

    -378

In [9]:

    zahl2 - zahl1 # Order matters

Out[9]:

    378

In [10]:

    zahl2 * zahl1 # Multiplikation

Out[10]:

    17640

In [11]:

    zahl2 / zahl1 # Division

Out[11]:

    10.0

In [12]:

    2**4 # Exponentiation

Out[12]:

    16

In [13]:

    float1 = 42.42 # Fließkommzahl speichern
    float1

Out[13]:

    42.42

In [14]:

    zahl2 // zahl1 # Ganzzahldivision

Out[14]:

    10

In [15]:

    42 % 2 # Modulo (Rest einer Division)

Out[15]:

    0

In [16]:

    divmod(42, 2) # Kombinierte Built-in funktion, welche den Wert der Ganzzahldivision und den Rest berechnet

Out[16]:

    (21, 0)

In [17]:

    42 / 2

Out[17]:

    21.0

In [18]:

    42 % 2

Out[18]:

    0

In [19]:

    0.1 + 0.2 # Addition von Floats sind nicht immer akkurat

Out[19]:

    0.30000000000000004

## Booleans¶

In [20]:

    0.1 + 0.2 == 0.3 # Nicht richtig aufgrund der unkorrekten binären darstellung von floats

Out[20]:

    False

In [21]:

    True

Out[21]:

    True

In [22]:

    False

Out[22]:

    False

In [23]:

    True + True # Bools sind auch nur Zahlen (True = 1, False = 0)

Out[23]:

    2

## Listen¶

In [24]:

    l = ["Hallo Python", 42, 10.10] # Erstellen einer Liste mit 3 elementen
    l

Out[24]:

    ['Hallo Python', 42, 10.1]

In [25]:

    l.append("Text") # Weiteres Element an die liste anfügen
    l

Out[25]:

    ['Hallo Python', 42, 10.1, 'Text']

In [26]:

    l

Out[26]:

    ['Hallo Python', 42, 10.1, 'Text']

In [27]:

    g = l[2] # Zugriff auf das dritte Element der Liste
    g

Out[27]:

    10.1

In [28]:

    l[0] # Zugriff erstes element der Liste

Out[28]:

    'Hallo Python'

In [29]:

    l[-3] # Auff listen lässt sich auch 'rückwärts' zugreifen

Out[29]:

    42

In [30]:

    l.remove('Text') # Einen Wert aus der Liste entfernen
    l

Out[30]:

    ['Hallo Python', 42, 10.1]

## Strings¶

In [31]:

    str1 = 'Tex"t' # String mit ''
    str1

Out[31]:

    'Tex"t'

In [32]:

    str2 = "Text'2" # String mit ""
    str2

Out[32]:

    "Text'2"

In [33]:

    # Documentation Strings oder mehrzeillige Strings
    str3 = '''
    Hallo dies ist ein
    echt langer
    nicht formattierter
    text!!!! ' "

    '''
    str3 # Ausgabe mit escape Characters

Out[33]:

    '\nHallo dies ist ein \necht langer \nnicht formattierter \ntext!!!! \' "\n\n'

In [34]:

    print(str3) # "Hübsche" Ausgabe

    Hallo dies ist ein
    echt langer
    nicht formattierter
    text!!!! ' "

In [35]:

    str1[2] # Strings sind auch nur Listen

Out[35]:

    'x'

In [36]:

    f"{str1} ist ein text" # F-String formatierung

Out[36]:

    'Tex"t ist ein text'

In [37]:

    "{} ist ein text".format(str1) # Formatierung mittels format funktion

Out[37]:

    'Tex"t ist ein text'

## Tuples¶

In [38]:

    tuple1 = (42, 10.10) # Tuple erstellen
    tuple1

Out[38]:

    (42, 10.1)

In [39]:

    tuple1[0] # auf element des Tupels zugreifen

Out[39]:

    42

In [40]:

    tuple1.append(1) # Tuples sind unveränderlich (immutable) daher können nicht einfach elemente angefügt werden

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    Cell In[40], line 1
    ----> 1 tuple1.append(1) # Tuples sind unveränderlich (immutable) daher können nicht einfach elemente angefügt werden

    AttributeError: 'tuple' object has no attribute 'append'

## Dictionarys¶

In [41]:

    dict1 = {"Name": "Phil", "Key": 42} # Dictionary erstellen
    dict1

Out[41]:

    {'Name': 'Phil', 'Key': 42}

In [42]:

    dict1["Key"] # Zugriff auf element des Dicts mittels Schlüssel

Out[42]:

    42

In [43]:

    dict1["Key2"] = 10 # neues Element in das Dict einfügen
    dict1

Out[43]:

    {'Name': 'Phil', 'Key': 42, 'Key2': 10}

## Sets¶

In [44]:

    set1 = {1, 1, 2, 2, 3, 3, 4} # Set erstellen
    set1 # Sets haben ausschließlich einzigartige Elemente

Out[44]:

    {1, 2, 3, 4}

## Conditionals¶

In [45]:

    42 % 2 == 0 # Prüfen auf equality

Out[45]:

    True

In [46]:

    # Unterschiedlichen Code ausführen je nach Bedingung
    zahl = 32
    if zahl % 2 == 1: # ist die zahl Gerade?
        print("Ist Ungerade") # Wenn Ja
    else:
        print("Ist Gerade") # Wenn Nein

    Ist Gerade

In [47]:

    # Argument "verneinen"
    zahl = 32
    if not zahl % 2 == 1: # Ist die zahl nicht gerade?
        print("Ist Gerade") # Wenn Ja (Zahl nicht gerade -> Zahl gerade)
    else:
        print("Ist Ungerade") # Wenn Nein

    Ist Gerade

In [48]:

    if 42 % 2 == 0 and 36 % 2 == 1: # Und verknüpfung alle bedingungen müssen wahr sein
        print("Sind beide Gerade")

In [49]:

    True and False

Out[49]:

    False

In [50]:

    if 42 % 2 == 0 or 36 % 2 == 1: # Oder Verknüpfung eine oder mehrere Bedingungen müssen wahr sein
        print("Eine Zahl ist Gerade")

    Eine Zahl ist Gerade

In [51]:

    True or False

Out[51]:

    True

In [52]:

    False or False

Out[52]:

    False

In [53]:

    True or True

Out[53]:

    True

In [54]:

    # Verschiedene Bedingungen mit verschiedenen Ausgaben
    zahl = 10

    if zahl % 3 == 0: # zahl durch 3 teilbar?
        print("Zahl ist durch 3 glatt teilbar")
    elif zahl % 5 == 0: # Zahl durch 5 teilbar?
        print("Zahl ist durch 5 glatt teilbar")
    else: # Weder noch (Base Case)
        print("Zahl ist nicht durch 3 oder 5 teilbar")

    Zahl ist durch 5 glatt teilbar

In [55]:

    zahl = 90.0
    isinstance(zahl, float) # Prüfen ob eine variable einem der Datentypen entspricht (hier float)

Out[55]:

    True

## Funktionen¶

In [56]:

    def f(x): # Einleiten einer Funktion
        ''' Berechnet das quadrat einer Zahl''' # Docstring zum beschreiben der Funktion
        # .... irgendeine Berechnung
        rückgabewert = x*x # ist der rückgabewert
        return rückgabewert #

In [57]:

    f(7)

Out[57]:

    49

## While Loops¶

In [58]:

    i = 0 # Condition
    while i < 10: # Prüfung
        print(i, "Hallo Python")
        i = i + 1 # Anpassung

    0 Hallo Python
    1 Hallo Python
    2 Hallo Python
    3 Hallo Python
    4 Hallo Python
    5 Hallo Python
    6 Hallo Python
    7 Hallo Python
    8 Hallo Python
    9 Hallo Python

## 99 Bootles of Beer¶

In [ ]:

    # Vereinigung aller heute gelernten Dinge außer der Funktions Definition

    # 99 Bootles of Beer
    beer = 99
    while beer > -1:
        print()
        if beer == 0:
            print('''
            No more bottles of beer on the wall, no more bottles of beer.
            We've taken them down and passed them around;
            now we're drunk and passed out!
            ''')
        elif beer == 1:
            print(beer, "bottle of beer on the wall,", beer, "bottle of beer.")
            print("Take one down and pass it around, no more bottles of beer on the wall.", end='')
        else:
            print(beer, "bottles of beer on the wall,", beer, "bottles of beer.")
            if beer - 1 == 1:
                print(f"Take one down and pass it around, {beer - 1} bottle of beer on the wall.")
            else:
                print(f"Take one down and pass it around, {beer - 1} bottles of beer on the wall.")

        beer -= 1

    # Ausgabe ist zu groß für Slides