@ -0,0 +1 @@ | |||||
.pytest_cache/ |
@ -0,0 +1,258 @@ | |||||
""" 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)) |
@ -0,0 +1,255 @@ | |||||
""" coding=utf-8 | |||||
Analytical Skills - practicum 2: statistiek | |||||
(c) 2019 Hogeschool Utrecht | |||||
Tijmen Muller (tijmen.muller@hu.nl) | |||||
""" | |||||
""" | |||||
LET OP: JE MAG VOOR DEZE OPDRACHT GEEN (extra) MODULES IMPORTEREN! | |||||
Je krijgt in deze opdracht alleen de beschikking over de functie sqrt() om een | |||||
wortel te kunnen trekken. Deze is al voor je geimporteerd en kun je direct aanroepen. | |||||
Bijvoorbeeld: sqrt(16) = 4.0 | |||||
Practicum 2: Werk onderstaande functies uit. Elke functie krijgt een lijst *lst* met | |||||
gehele getallen (int) als argument. | |||||
freq(lst): | |||||
Return een dictionary met als keys de waardes die voorkomen in *lst* en | |||||
als value het aantal voorkomens van die waarde. | |||||
Bijvoorbeeld: freq([0, 0, 4, 5]) = {0: 2, 4: 1, 5: 1} | |||||
mean(lst): | |||||
Return het gemiddelde van de lijst lst. | |||||
median(lst): | |||||
Return de mediaan van de lijst lst. | |||||
modes(lst): | |||||
Return een gesorteerde lijst van de modi van lijst lst. | |||||
rnge(lst): | |||||
Return het bereik van de lijst lst. | |||||
var(lst): | |||||
Return de variantie van de lijst lst. | |||||
std(lst): | |||||
Return de standaardafwijking van de lijst lst. | |||||
q1(lst): | |||||
Return het eerste kwartiel Q1 van de lijst lst. | |||||
q3(lst): | |||||
Return het derde kwartiel Q3 van de lijst lst. | |||||
""" | |||||
from math import sqrt | |||||
def freq(lst): | |||||
freqs = dict() | |||||
return freqs | |||||
def mean(lst): | |||||
return 0.0 | |||||
def median(lst): | |||||
return 0.0 | |||||
def modes(lst): | |||||
return [] | |||||
def rnge(lst): | |||||
return 0 | |||||
def var(lst): | |||||
return 0.0 | |||||
def std(lst): | |||||
return 0.0 | |||||
def q1(lst): | |||||
return 0.0 | |||||
def q3(lst): | |||||
return 0.0 | |||||
""" | |||||
======================================================================================================================== | |||||
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_arg(function, arg, expected_output): | |||||
assert function(arg) == expected_output, "Fout: {}({}) geeft {} in plaats van {}".format(function.__name__, arg, function(arg), expected_output) | |||||
def test_mean(): | |||||
testcases = [ | |||||
([1, 3, 2, 4, 6, 2, 4, 2], 3.0) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(mean, case[0], case[1]) | |||||
def test_rnge(): | |||||
testcases = [ | |||||
([1, 3, 2, 4, 6, 2, 4, 2], 5) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(rnge, case[0], case[1]) | |||||
def test_median(): | |||||
testcases = [ | |||||
([1, 3, 4, 6, 4, 2], 3.5), | |||||
([1, 3, 4, 6, 2, 4, 2], 3.0), | |||||
([1, 3, 2, 4, 6, 2, 4, 2], 2.5) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(median, case[0], case[1]) | |||||
def test_modes(): | |||||
testcases = [ | |||||
([1, 3, 6, 4, 2], [1, 2, 3, 4, 6]), | |||||
([1, 3, 4, 6, 4, 2], [4]), | |||||
([1, 3, 4, 6, 2, 4, 2], [2, 4]), | |||||
([1, 3, 2, 4, 6, 2, 4, 2], [2]) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(modes, case[0], case[1]) | |||||
def test_var(): | |||||
testcases = [ | |||||
([1, 3, 2, 4, 6, 2, 4, 2], 2.25) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(var, case[0], case[1]) | |||||
def test_std(): | |||||
testcases = [ | |||||
([1, 3, 2, 4, 6, 2, 4, 2], 1.5) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(std, case[0], case[1]) | |||||
def test_q1(): | |||||
testcases = [ | |||||
([1, 3, 4, 6, 4, 2], 2.0), | |||||
([1, 3, 5, 6, 1, 4, 2], 1.0), | |||||
([1, 3, 3, 5, 6, 2, 4, 1], 1.5) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(q1, case[0], case[1]) | |||||
def test_q3(): | |||||
testcases = [ | |||||
([1, 3, 4, 6, 4, 2], 4.0), | |||||
([1, 3, 5, 6, 2, 4, 1], 5.0), | |||||
([1, 3, 3, 5, 6, 2, 4, 1], 4.5) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(q3, case[0], case[1]) | |||||
def test_freq(): | |||||
testcases = [ | |||||
([1, 3, 4, 6, 4, 2], {1: 1, 2: 1, 3: 1, 4: 2, 6: 1}), | |||||
([1, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}), | |||||
([1, 3, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 2, 4: 1, 5: 1, 6: 1}) | |||||
] | |||||
for case in testcases: | |||||
my_assert_arg(freq, case[0], case[1]) | |||||
if __name__ == '__main__': | |||||
try: | |||||
print("\x1b[0;32m") | |||||
test_mean() | |||||
print("Je functie mean(lst) werkt goed!") | |||||
test_rnge() | |||||
print("Je functie rnge(lst) werkt goed!") | |||||
test_median() | |||||
print("Je functie median(lst) werkt goed!") | |||||
test_modes() | |||||
print("Je functie modes() werkt goed!") | |||||
test_q1() | |||||
print("Je functie q1(lst) werkt goed!") | |||||
test_q3() | |||||
print("Je functie q3(lst) werkt goed!") | |||||
test_var() | |||||
print("Je functie var(lst) werkt goed!") | |||||
test_std() | |||||
print("Je functie std(lst) werkt goed!") | |||||
test_freq() | |||||
print("Je functie freq(lst) werkt goed!") | |||||
print("Gefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...\n") | |||||
def hist(freqs): | |||||
v_min = min(freqs.keys()) | |||||
v_max = max(freqs.keys()) | |||||
histo = str() | |||||
for i in range(v_min, v_max + 1): | |||||
histo += "{:5d} ".format(i) | |||||
if i in freqs.keys(): | |||||
histo += "█" * freqs[i] | |||||
histo += '\n' | |||||
return histo | |||||
s = input("\x1b[0;30mGeef een reeks van gehele getallen (gescheiden door een spatie): ") | |||||
userlst = [int(c) for c in s.split()] | |||||
print("\nHet gemiddelde is {:.2f}".format(mean(userlst))) | |||||
print("De modi zijn {}".format(modes(userlst))) | |||||
print("De mediaan is {:.2f}".format(median(userlst))) | |||||
print("Q1 is {:.2f}".format(q1(userlst))) | |||||
print("Q3 is {:.2f}".format(q3(userlst))) | |||||
print("Het bereik is {}".format(rnge(userlst))) | |||||
print("De variantie is {:.2f}".format(var(userlst))) | |||||
print("De standaardafwijking is {:.2f}".format(std(userlst))) | |||||
print("\nHistogram (gekanteld):\n\n" + hist(freq(userlst))) | |||||
except AssertionError as ae: | |||||
print("\x1b[0;31m" + str(ae)) |