Elke oefening kan worden opgelost met de theorie/technieken die tot en met dit hoofdstuk zijn overlopen. Echter worden in de voorbeeldoplossingen soms meer geavanceerde technieken gebruikt die tot een meer elegante oplossingen leiden. Noteer bovendien dat er steeds verschillende oplossingen mogelijk zijn.

H05.1

What goes in must come out

def a2r(x):
    return x

Wat is er fout?

def oppervlakte_van_driehoek(basis, hoogte):
    oppervlakte = 0.5 * basis * hoogte
    return f'Een driehoek met basis {basis} en hoogte {hoogte} heeft oppervlakte {oppervlakte}'

Gouden raad van tante Kaat 2

def clean(s):
    s = s.lower()
    r = ""
    for el in s:
        if el in string.ascii_lowercase:
            r = r + el
    return r

Chaos hulp functie

def chaos(d, r):
    return r * d * (1 - d)

Sterke wachtwoorden hulp functie

import string

def w8w2score(w):
    # w = input()
    score = 0
    up = False
    low = False
    dig = False
    special = False
    for el in w:
        if el in string.ascii_uppercase:
            up = True
        elif el in string.ascii_lowercase:
            low = True
        elif el in string.digits:
            dig = True
        else:
            special = True
    if len(w) >= 8:
        score += 1
    x = (up, low, dig, special)
    score += x.count(True)

    if score == 5:
        return "sterk"
    elif score < 3:
        return "zwak"
    else:
        return "matig"

Driehoek

import math

def omtrek(a, b, c):
    return a + b + c


def oppervlakte(a, b, c):
    s = (a+b+c)*0.5
    A = math.sqrt(s*(s-a)*(s-b)*(s-c))
    return round(A, 2)

Heb je even voor mij? 2

def iseven(n):
    if n % 2 == 0:
        return True
    return False

Go low 3

def go(s, c):
    if c == "low":
        return s.lower()
    return s.upper()

H05.2

Kwadratische vergelijkingen

def discriminant(a, b, c):
    return float(b ** 2 - 4 * a * c)

def oplossingen(a, b, c):
    D = discriminant(a, b, c)
    if abs(D) < 1e-6:
        aantal = 1
        x1 = (-b - D ** 0.5) / (2 * a)
        x2 = x1
    elif D > 0:
        aantal = 2
        x1 = (-b - D ** 0.5) / (2 * a)
        x2 = (-b + D ** 0.5) / (2 * a)
    else:
        aantal = 0
        x1 = 0
        x2 = 0

    return aantal, x1, x2

Gregory-Leibnitz reeks

def gregory_leibnitz(termen):

    som = 0
    for index in range(termen):
        som += 1 / (2 * index + 1) * (-1) ** index

    return 4 * som

Tempo

def snelheid2tempo(v):
    t = (v**-1) * 60
    return t


def tempo2snelheid(t):
    v = t**-1 * 60
    return v


def converter(x):
    x = x.replace(" ", "")
    if "km/h" in x:  # snelheid
        x = float(x[:-4])
        return f"{snelheid2tempo(x)} min/km"
    else:  # "min/km"  # tempo
        x = float(x[:-6])
        return f"{tempo2snelheid(x)} km/h"

Heb je even voor mij? 3

def deelbaar_door(a, b):
    if b > a:
        return False
    return a % b == 0

def iseven(n:int):
    return n%2 == 0

def is_even_en_deelbaar_door(n: int, d = None):
    if d is None:
        return iseven(n)
    return iseven(n) and deelbaar_door(n, d)

Binomiaalcoëfficiënt

def faculteit(n):
    resultaat = 1
    for factor in range(1, n + 1):
        resultaat *= factor

    return resultaat

def binomiaal(n, k):
    if not 0 <= k <= n:
        return 0

    return faculteit(n) // (faculteit(k) * faculteit(n - k))

Dubbel juist

def karakterwaarde(karakter):
    return ord(karakter.upper()) - ord('A') + 1 if karakter.isalpha() else 0

def stringwaarde(zin):
    return sum(karakterwaarde(karakter) for karakter in zin)

def isevenwaardig(zin1, zin2):
    return stringwaarde(zin1) == stringwaarde(zin2)

def isgelijkheid(uitdrukking):
    if not uitdrukking.count('=') == 1:
        return False

    return isevenwaardig(*uitdrukking.split('='))

Big Mac Index

def waardering(prijs, wisselkoers):
    # procentuele verhouding berekenen
    v = prijs / 4.07
    v = ((v - wisselkoers) / wisselkoers) * 100.0
    
    # waardering bepalen
    if v <= -25:
        return 'sterk ondergewaardeerd'
    elif v <= -5:
        return 'ondergewaardeerd'
    elif v <= 5:
        return 'ongeveer gelijk'
    elif v <= 25:
        return 'overgewaardeerd'
    else:
        return 'sterk overgewaardeerd'
    
def wisselkoersanalyse(prijs, wisselkoers):
    bedrag, munt = prijs.split(' ', 1)
    return 'De {} is {} ten opzichte van de dollar.'.format(munt, waardering(float(bedrag), wisselkoers))