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.
def a2r(x):
    return x
def oppervlakte_van_driehoek(basis, hoogte):
    oppervlakte = 0.5 * basis * hoogte
    return f'Een driehoek met basis {basis} en hoogte {hoogte} heeft oppervlakte {oppervlakte}'
def clean(s):
    s = s.lower()
    r = ""
    for el in s:
        if el in string.ascii_lowercase:
            r = r + el
    return r
def chaos(d, r):
    return r * d * (1 - d)
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"
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)
def iseven(n):
    if n % 2 == 0:
        return True
    return False
def go(s, c):
    if c == "low":
        return s.lower()
    return s.upper()
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
def gregory_leibnitz(termen):
    som = 0
    for index in range(termen):
        som += 1 / (2 * index + 1) * (-1) ** index
    return 4 * som
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"
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)
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))
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('='))
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))