Python: Functies


Home 4BSW1 4BSW2 4MTLAT/4LAT 4MWW1 4MWW2 4NWE2 5BWE 5EWI/5LWI/5WWI1 5WWI2 About

1. Verbetering Herhalingsoefening

1.1. Feedback

  • in het algemeen: heel goed!
  • sommige écht toffe oplossingen!
  • chatGPT mag, maar het produceerd in eerste instantie veel BS. Je leert er niets bij.
  • leer “error traceback” lezen; laat zeker je code “runnen”
  • groepswerk is gewenst! MAAR: groepswerk ≠ kopiëren.
    • vermeld je bron!
    • verbeter haar code!
    • verdeel het werk
  • hou je aan afspraken (bv. deadline)

1.2. Strings

# een test string
sample_data = "Pa's wijze lynx bezag vroom het fikse aquaduct." # OF:
sample_data = "AGC.TTTTC#ATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATT-AAAAA$AAGAGTGTCTGATAGCAGC"

# (a) Maak er een {set} aan van de "string", met alle letters in de "sample_data".
# (b) Itereer met een 'loop' over de sample_data, en tel de letters op! (bv. met een "dict")
# (c) Tel alleen maar letters van "a" tot "z" (gebruik een "conditional" in uw loop).
#     (help hier: https://towardsdatascience.com/python-ord-and-chr-functions-explained-dcb39944c480 )
# (d): Maak het programma hoofdletterongevoelig!
#      (zie bv. hier: https://thehelloworldprogram.com/python/python-string-methods/ )
# (e) print het resultaat af!
#     bv. `print(count)`

sample_set = set(sample_data)

count = {}
for letter in sample_set:
    if not letter.isalpha():
        continue

    sample_lower = sample_data.lower()
    letter_lower = letter.lower()
    count[letter_lower] = sample_lower.count(letter_lower)

print (count)

2. Functies in Python

Schrijf een “functie” van een string de letters telt (zie opdracht 1, boven).

def Function(signature):
    pass

sample_data = "Pa's wijze lynx bezag vroom het fikse aquaduct."

Voorbeeld: de procedure van boven

# een test string


def CountLetters(sample_data = None, hoofdlettergevoelig = True):
    # Deze functie gaat tellen hoe veel van een letter in een string zitten.

    if sample_data is None:
        # we geven een foutmelding als er geen string is!
        raise IOError("please provide a string!")

    # eerst zetten we de string om in een set.
    sample_set = set(sample_data)

    # we tellen op in een dictionary
    count = {}

    # iteratie over de test string
    for letter in sample_set:
        # non-alfanumerische char's skippen we
        if not letter.isalpha():
            continue

        # afhankelijk van de gebruikerkeuze: hoofdletters tellen apart
        if hoofdlettergevoelig:
            sample_lower = sample_data
            letter_lower = letter
        else:
            sample_lower = sample_data.lower()
            letter_lower = letter.lower()

        # ... en optellen!
        count[letter_lower] = sample_lower.count(letter_lower)

    # we geven de "count" aan het hoofdprogramma terug.
    return count

dna = "AGC.TTTTC#ATtctgactgcaacgggcaATATGTCTCTGTGTGGATT-AAAAA$AAGAGTGTCTGATAGCAGC"
letter_count = CountLetters(dna, hoofdlettergevoelig = False)
print (letter_count)

2.1. Begrippen

  • functie (signaalwoord “def”)
  • signatuur
  • scope
  • keyword

2.2. Best Practices

  • beduidzame variablenamen en functienamen
  • documentatie (commentaren met “hashtag”)
  • één functie per taak (modulaire structuur)

3. Matplotlib

# (a) Installeer de bibliotheken "numpy" en "matplotlib", bv. met "pip".
# (b) Lees eventjes de documentatie over Numpy Arrays.
# (c) Gebruik "numpy.linspace" om een array `x` aan te maken die in 100 stappen van -2 tot 2 telt.
# (d) Bereken er de volgende functies:
#     functie_d1: y = -x² + 0.2x + 5
#     functie_d2: y = exp(x)  (exponentiële functie, zoek in de numpy documentatie)
#     noot: de exponent x² schrijf je in python als `x**2`
# (e) Pas, indien nodig, de volgende code toe om uw functies te plotten:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

x = np.linspace(-2, +2, 101, endpoint = True)

y1 = -x**2+0.2*x+5
y2 = np.exp(x)

import matplotlib.pyplot as plt
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()


Date: 2023-10-20 Fri 00:00

Author: Falk Mielke