# ============================================================
#  main.py  —  hier staat al jouw Python-code
#
#  Elke wiskundige functie bestaat uit 2 delen:
#    DEEL A: de echte berekening (gewone Python, zoals in les 5)
#    DEEL B: de "knop-functie" die de website aan Python koppelt
#
#  Wil je een nieuwe functie toevoegen? Kopieer een blok
#  (DEEL A + DEEL B) en pas de namen aan. Meer hoef je niet te doen.
# ============================================================

from pyscript import web, when


# ------------------------------------------------------------
#  1. FACULTEIT      voorbeeld: 5! = 5 * 4 * 3 * 2 * 1 = 120
# ------------------------------------------------------------

# DEEL A: de berekening
def faculteit(n):
    uitkomst = 1
    for getal in range(1, n + 1):
        uitkomst = uitkomst * getal
    return uitkomst


# DEEL B: de knop-functie
#   - @when("click", "#knop-faculteit"): draait bij een klik op die knop
#   - web.page["invoer-faculteit"]: het invoerveld met die id
#   - web.page["uitvoer-faculteit"]: de plek waar het antwoord komt
@when("click", "#knop-faculteit")
def knop_faculteit(event):
    n = int(web.page["invoer-faculteit"].value)
    antwoord = faculteit(n)
    web.page["uitvoer-faculteit"].innerText = str(n) + "! = " + str(antwoord)


# ------------------------------------------------------------
#  2. WORTEL BENADEREN     voorbeeld: wortel(2) ≈ 1.4142
#     (Methode van Heron: begin met een gok en verbeter die 20 keer)
# ------------------------------------------------------------

# DEEL A: de berekening
def wortel(x):
    if x == 0:            # anders zouden we straks door 0 delen
        return 0
    gok = x / 2
    for i in range(20):
        gok = (gok + x / gok) / 2
    return gok


# DEEL B: de knop-functie
@when("click", "#knop-wortel")
def knop_wortel(event):
    x = float(web.page["invoer-wortel"].value)
    antwoord = wortel(x)
    web.page["uitvoer-wortel"].innerText = "wortel(" + str(x) + ") ≈ " + str(round(antwoord, 4))


# ------------------------------------------------------------
#  3. STELLING VAN PYTHAGORAS   —   TWEE INVOERVELDEN
#     Schuine zijde c van een rechthoekige driehoek: c = wortel(a^2 + b^2)
# ------------------------------------------------------------

# DEEL A: de berekening
#   Twee invoervelden betekent simpelweg: twee parameters.
def schuine_zijde(a, b):
    return wortel(a * a + b * b)      # we hergebruiken onze eigen wortel-functie


# DEEL B: de knop-functie
#   Voor elk invoerveld één regel erbij. Verder verandert er niets.
@when("click", "#knop-pythagoras")
def knop_pythagoras(event):
    a = float(web.page["invoer-pythagoras-a"].value)
    b = float(web.page["invoer-pythagoras-b"].value)
    antwoord = schuine_zijde(a, b)
    web.page["uitvoer-pythagoras"].innerText = "c = " + str(round(antwoord, 4))


# ------------------------------------------------------------
#  4. JOUW FUNCTIE HIER
#     Kopieer blok 1, 2 of 3, en verander:
#       - de naam van de functie (DEEL A)
#       - de id's: knop-..., invoer-..., uitvoer-...  (DEEL B)
#     Meer invoervelden nodig? Zie blok 3: één extra regel per veld.
#     Vergeet niet dezelfde id's in index.html te gebruiken!
# ------------------------------------------------------------
