Appendix: Adventcalender solutions
Contents
Appendix: Adventcalender solutions#
Ab morgen geht in der WG der Adventskalender los. Leider gibt es noch keine Reihenfolge, wer wann ein Päckchen öffnen darf.
Natürlich kann seit diesem Jahr auch Python genutzt werden um das Problem zu lösen. Wer eine Lösung einer randomisierten Ziehung für die Mitbewohnenden (mitbewohner_innen = [“Charlotte”, “Elli”, “Malena”, “Felix”, “Vanessa”, “Julius”]) - 01.12. bis 24.12.- bis nächste Woche zum Seminar einsendet, bekommt einen Joker für eine Woche Aufgaben. Alle sollten natürlich gleich viele Päckchen bekommen.
Filenames examples#
good = 'this_is_a_good_file.ipynb' # all lower case and seperated by underscore
bad = 'This is a bad filename, by Julius.Welzel.ipynb' # includes whitespace and comma
Example 1#
import numpy as np
#variable erstellen, die zum Lösungsversuch mit np.random,choice passt
mitbewohner_innen = np.tile (["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"], (4))
mitbewohner_innen
array(['Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius',
'Charlotte', 'Elli', 'Malena', 'Felix', 'Vanessa', 'Julius'],
dtype='<U9')
# Kalendertürchen verteilen. Es wird ein Array ausgegeben, der die Reihenfolge der Türchenöffnenden angibt.
verteilen = np.random.choice(mitbewohner_innen , size = 24, replace = True, p = [(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24),(1/24)])
verteilen
array(['Vanessa', 'Vanessa', 'Vanessa', 'Malena', 'Julius', 'Malena',
'Elli', 'Elli', 'Vanessa', 'Julius', 'Felix', 'Vanessa', 'Felix',
'Elli', 'Vanessa', 'Malena', 'Vanessa', 'Charlotte', 'Vanessa',
'Vanessa', 'Elli', 'Vanessa', 'Julius', 'Felix'], dtype='<U9')
# Kalendertürchen verteilen. Es wird ein Array ausgegeben, der die Reihenfolge der Türchenöffnenden angibt.
n_tuerchen = 24
verteilen = np.random.choice(mitbewohner_innen , size = n_tuerchen, replace = True, p = [(1/n_tuerchen)] * n_tuerchen)
verteilen
array(['Julius', 'Charlotte', 'Malena', 'Vanessa', 'Julius', 'Felix',
'Elli', 'Elli', 'Julius', 'Charlotte', 'Malena', 'Vanessa', 'Elli',
'Julius', 'Vanessa', 'Charlotte', 'Elli', 'Malena', 'Malena',
'Elli', 'Felix', 'Vanessa', 'Julius', 'Felix'], dtype='<U9')
Example 2#
import numpy as np
import random
mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]
datum = np.arange(1,25,1, dtype = int)
random.shuffle(datum)
x = 0
ind1 = 0
ind2 = 0
for i in mitbewohner_innen:
ind2 = ind2 + 4
list = datum[ind1:ind2]
print(mitbewohner_innen[x])
print(list)
x = x+1
ind1 = ind2
Charlotte
[17 22 24 6]
Elli
[ 1 4 20 10]
Malena
[21 15 16 7]
Felix
[ 5 9 23 3]
Vanessa
[19 12 14 8]
Julius
[11 2 13 18]
new_test_list = list('christmas')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [7], in <cell line: 1>()
----> 1 new_test_list = list('christmas')
TypeError: 'numpy.ndarray' object is not callable
del list
import numpy as np
import random
mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]
datum = np.arange(1,25,1, dtype = int)
random.shuffle(datum)
x = 0
ind1 = 0
ind2 = 0
for i in mitbewohner_innen:
ind2 = ind2 + 4
date_list = datum[ind1:ind2]
print(mitbewohner_innen[x])
print(date_list)
x = x+1
ind1 = ind2
Charlotte
[16 9 13 3]
Elli
[ 5 10 14 15]
Malena
[21 22 6 1]
Felix
[24 23 12 4]
Vanessa
[ 2 7 8 18]
Julius
[20 11 17 19]
new_test_list = list("x-mas")
print(new_test_list)
['x', '-', 'm', 'a', 's']
Example 3#
dates = np.arange(1, 25, 1, dtype = int)
names = list(np.repeat(["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"], 4))
np.random.shuffle(names)
for i in range(len(dates)) :
print(f"{dates[i]:>2}.12.2022: {names[i]}")
1.12.2022: Elli
2.12.2022: Felix
3.12.2022: Charlotte
4.12.2022: Malena
5.12.2022: Julius
6.12.2022: Charlotte
7.12.2022: Malena
8.12.2022: Elli
9.12.2022: Elli
10.12.2022: Felix
11.12.2022: Charlotte
12.12.2022: Felix
13.12.2022: Malena
14.12.2022: Felix
15.12.2022: Elli
16.12.2022: Vanessa
17.12.2022: Vanessa
18.12.2022: Julius
19.12.2022: Malena
20.12.2022: Vanessa
21.12.2022: Julius
22.12.2022: Vanessa
23.12.2022: Charlotte
24.12.2022: Julius
One of many solutions#
import pandas as pd
from random import shuffle
mitbewohner_innen = ["Charlotte", "Elli", "Malena", "Felix", "Vanessa", "Julius"]
n_days = 24
n_bewohner_innen = len(mitbewohner_innen)
n_draws = n_days // n_bewohner_innen
days = [i for i in range(1,n_days + 1)]
adv_cal = mitbewohner_innen * n_draws
shuffle(adv_cal)
pd_cal = pd.DataFrame(adv_cal, index=days, columns =['Adventskalender'])
print(pd_cal)
n_my_draws = pd_cal["Adventskalender"].str.count("Julius").sum()
print(f"\n Julius bekommt {n_my_draws} Päckchen")
Adventskalender
1 Charlotte
2 Elli
3 Felix
4 Charlotte
5 Julius
6 Julius
7 Vanessa
8 Charlotte
9 Malena
10 Julius
11 Elli
12 Vanessa
13 Felix
14 Felix
15 Vanessa
16 Vanessa
17 Malena
18 Felix
19 Malena
20 Elli
21 Julius
22 Charlotte
23 Elli
24 Malena
Julius bekommt 4 Päckchen