from pyscript import document
import math
def log_base(value, base):
return math.log(value) / math.log(base)
def show_fields(fields_to_show):
all_fields = [
"field_g",
"field_a",
"field_b",
"field_n",
"field_p",
"field_y",
]
for field_id in all_fields:
el = document.getElementById(field_id)
if field_id in fields_to_show:
el.classList.add("show")
else:
el.classList.remove("show")
def on_rule_change(event=None):
rule = document.getElementById("rule_select").value
if rule in ("1", "2"):
show_fields({"field_g", "field_a", "field_b"})
elif rule == "3":
show_fields({"field_g", "field_a", "field_n"})
elif rule == "4":
show_fields({"field_g", "field_y"})
elif rule in ("5"):
show_fields({"field_g", "field_a"})
document.getElementById("formula").innerText = "Kies een regel en vul de waarden in."
document.getElementById("output").innerText = ""
def read_float(input_id, label):
raw = document.getElementById(input_id).value
if raw is None or raw == "":
raise ValueError(f"Vul {label} in.")
try:
return float(raw)
except ValueError as exc:
raise ValueError(f"{label} moet een getal zijn.") from exc
def set_result(formula_html, output_text):
document.getElementById("formula").innerHTML = formula_html
document.getElementById("output").innerText = output_text
def bereken(event):
rule = document.getElementById("rule_select").value
try:
if rule == "1":
g = read_float("g_input", "g")
a = read_float("a_input", "a")
b = read_float("b_input", "b")
if g <= 0 or g == 1 or a <= 0 or b <= 0:
raise ValueError("g > 0 en g ≠ 1, a > 0, b > 0.")
lhs = log_base(a, g) + log_base(b, g)
rhs = log_base(a * b, g)
set_result(
f"logg({a}) + logg({b}) = logg({a * b})",
f"Links = {lhs:.6g}, rechts = {rhs:.6g}",
)
elif rule == "2":
g = read_float("g_input", "g")
a = read_float("a_input", "a")
b = read_float("b_input", "b")
if g <= 0 or g == 1 or a <= 0 or b <= 0:
raise ValueError("g > 0 en g ≠ 1, a > 0, b > 0.")
lhs = log_base(a, g) - log_base(b, g)
rhs = log_base(a / b, g)
set_result(
f"logg({a}) - logg({b}) = logg({a / b})",
f"Links = {lhs:.6g}, rechts = {rhs:.6g}",
)
elif rule == "3":
g = read_float("g_input", "g")
a = read_float("a_input", "a")
n = read_float("n_input", "n")
if g <= 0 or g == 1 or a <= 0:
raise ValueError("g > 0 en g ≠ 1, a > 0.")
lhs = log_base(a ** n, g)
rhs = n * log_base(a, g)
set_result(
f"logg({a}{n}) = {n} · logg({a})",
f"Links = {lhs:.6g}, rechts = {rhs:.6g}",
)
elif rule == "4":
g = read_float("g_input", "g")
y = read_float("y_input", "y")
if g <= 0 or g == 1:
raise ValueError("g > 0 en g ≠ 1.")
x = g ** y
set_result(
f"logg(x) = {y} geeft x = {g}{y}",
f"x = {x:.6g}",
)
elif rule == "5":
g = read_float("g_input", "g")
a = read_float("a_input", "a")
if g <= 0 or g == 1:
raise ValueError("g > 0 en g ≠ 1.")
value = log_base(g ** a, g)
set_result(
f"logg({g}{a}) = {a}",
f"Uitkomst = {value:.6g}",
)
except ValueError as exc:
document.getElementById("formula").innerText = "Controleer je invoer."
document.getElementById("output").innerText = str(exc)
on_rule_change()