Python: Functies
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()
vorige les \(\quad\) volgende les