Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 

258 linhas
7.5 KiB

""" coding=utf-8
Analytical Skills - practicum 1: getallen
(c) 2019 Hogeschool Utrecht
Bart van Eijkelenburg (bart.vaneijkelenburg@hu.nl)
Tijmen Muller (tijmen.muller@hu.nl)
"""
"""
LET OP: JE MAG VOOR DEZE OPDRACHT GEEN (extra) MODULES IMPORTEREN!
Practicum 1: Werk onderstaande functies uit.
floor(real):
Return het grootste gehele getal, dat kleiner dan of gelijk is aan real (reël getal).
ceil(real):
Return het kleinste gehele getal, groter dan of gelijk aan real (reël getal).
div(n):
Return een (natuurlijk) gesorteerde verzameling (lijst) van delers van n.
Het getal a ∈ N is een deler van n ∈ N, als er een b ∈ N is, zodat a · b = n.
is_prime(n):
Return True als n ∈ N een priemgetal is, anders False.
primefactors(n):
Return een (natuurlijk) gesorteerde verzameling (lijst) van priemfactoren van n.
Return [n] als n een priemgetal is, of n == 1. Tip: maak gebruik van de functie 'is_prime(n)'
primes_under_30():
Return alle priemgetallen kleiner dan 30.
gcd(a, b):
Return de grootste grootste gemene deler, ggd (ofwel greatest common divisor, gcd) is.
Je hebt twee opties voor deze opgave;
1. Je programmeert hier het algoritme van Euclides (niet behandeld)
zie: https://nl.wikipedia.org/wiki/Algoritme_van_Euclides
2. Je bedenkt zelf een oplossing waarbij je gebruik maakt van de eerder
geschreven methode div(n) om de gcd te bepalen.
lcm(a, b):
Return het kleinste gemene veelvoud, kvg (ofwel least common multiple).
add_frac(n1, d1, n2, d2):
Return de sommatie van twee breuken als breuk.
*n1* is de teller van de eerste breuk, *d1* is de noemer van de eerste breuk.
*n2* is de teller van de tweede breuk, *d2* is de noemer van de eerste breuk.
De returnwaarde bestaat uit eerste de teller en dan de noemer van het resultaat.
Bijvoorbeeld: 3/4 + 1/6 = 11/12
dan: add_frac(3, 4, 1, 6) = 11, 12
"""
def floor(real):
""" Return het grootste gehele getal, dat kleiner dan of gelijk is aan real (reëel getal). """
return 0
def ceil(real):
""" Return het kleinste gehele getal, groter dan of gelijk aan real (reëel getal). """
return 0
def div(n):
""" Return een (natuurlijk) gesorteerde verzameling (lijst) van delers van n.
Het getal a ∈ N is een deler van n ∈ N, als er een b ∈ N is, zodat a · b = n. """
divisors = []
return sorted(divisors)
def is_prime(n):
""" Return True als n ∈ N een priemgetal is, anders False.
Je kunt gebruik maken van de functie 'div(n)' om te bepalen of n een priem is.
Optioneel: bedenk een efficiënter alternatief. """
return False
def primefactors(n):
""" Return een (natuurlijk) gesorteerde verzameling (lijst) van priemfactoren van n.
Return [n] als n een priemgetal is, of n == 1. Tip: maak gebruik van de functie 'is_prime(n)' """
factors = []
return sorted(factors)
def primes_under_30():
""" Return alle priemgetallen kleiner dan 30. """
primes = []
return primes
def gcd(a, b):
""" Return de grootste grootste gemene deler, ggd (ofwel greatest common divisor, gcd) is. """
return 1
def lcm(a, b):
""" Return het kleinste gemene veelvoud, kvg (ofwel least common multiple). """
return 1
def add_frac(n1, d1, n2, d2):
""" Return de sommatie van twee breuken als breuk.
*n1* is de teller van de eerste breuk, *d1* is de noemer van de eerste breuk.
*n2* is de teller van de tweede breuk, *d2* is de noemer van de eerste breuk.
De returnwaarde bestaat uit eerste de teller en dan de noemer van het resultaat.
Bijvoorbeeld: 3/4 + 1/6 = 11/12
dan: add_frac(3, 4, 1, 6) = 11, 12
"""
return 1, 1
"""
========================================================================================================================
Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
Je kunt je code testen door deze file te runnen of met behulp van pytest.
"""
def my_assert_args(function, args, expected_output):
argstr = str(args).replace(',)', ')')
assert function(*args) == expected_output, "Fout: {}{} geeft {} in plaats van {}".format(function.__name__, argstr, function(*args), expected_output)
def test_floor():
testcases = [((1.0,), 1),
((1.05,), 1),
((1.95,), 1),
((-1.0,), -1),
((-1.05,), -2),
((-1.95,), -2)]
for case in testcases:
my_assert_args(floor, case[0], case[1])
def test_ceil():
testcases = [((1.0,), 1),
((1.05,), 2),
((1.95,), 2),
((-1.0,), -1),
((-1.05,), -1),
((-1.95,), -1)]
for case in testcases:
my_assert_args(ceil, case[0], case[1])
def test_div():
testcases = [
((1,), [1]),
((2,), [1, 2]),
((3,), [1, 3]),
((4,), [1, 2, 4]),
((8,), [1, 2, 4, 8]),
((12,), [1, 2, 3, 4, 6, 12]),
((19,), [1, 19]),
((25,), [1, 5, 25]),
((929,), [1, 929]),
((936,), [1, 2, 3, 4, 6, 8, 9, 12, 13, 18, 24, 26, 36, 39, 52, 72, 78, 104, 117, 156, 234, 312, 468, 936])
]
for case in testcases:
my_assert_args(div, case[0], sorted(case[1]))
def test_primefactors():
testcases = [
((1,), [1]),
((2,), [2]),
((3,), [3]),
((4,), [2, 2]),
((8,), [2, 2, 2]),
((12,), [2, 2, 3]),
((2352,), [2, 2, 2, 2, 3, 7, 7]),
((9075,), [3, 5, 5, 11, 11])
]
for case in testcases:
my_assert_args(primefactors, case[0], sorted(case[1]))
def test_primes_under_30():
expected_output = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
assert sorted(primes_under_30()) == expected_output, "Fout: primes_under_30() geeft {} in plaats van {}".format(primes_under_30(), expected_output)
def test_gcd():
testcases = [
((60, 70), 10)
]
for case in testcases:
my_assert_args(gcd, case[0], case[1])
def test_lcm():
testcases = [
((15, 27), 135)
]
for case in testcases:
my_assert_args(lcm, case[0], case[1])
def test_add_frac():
testcases = [
((1, 2, 1, 4), (3, 4)),
((3, 4, 1, 6), (11, 12)),
((1, 6, 3, 4), (11, 12))
]
for case in testcases:
my_assert_args(add_frac, case[0], case[1])
if __name__ == '__main__':
try:
print("\x1b[0;32m")
test_floor()
print("Je functie floor() werkt goed!")
test_ceil()
print("Je functie ceil() werkt goed!")
test_div()
print("Je functie div(n) werkt goed!")
test_primefactors()
print("Je functie primefactors(n) werkt goed!")
test_primes_under_30()
print("Je functie primes_under_30() werkt goed!")
test_gcd()
print("Je functie gcd(a, b) werkt goed!")
test_lcm()
print("Je functie lcm(a, b) werkt goed!")
test_add_frac()
print("Je functie add_frac(n1, d1, n2, d2) werkt goed!")
print("Gefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...")
except AssertionError as ae:
print("\x1b[0;31m" + str(ae))