Programming with Python
Kühne Logistics University Hamburg - Fall 2026
Sessions I-V. The first 40 minutes are the checkpoint. It starts now, before the investor sits down.
Cmd/Ctrl+S, then menu → Download → Download Python code → upload the .py to the “Checkpoint 3” assignment on Moodle, before the 40 minutes are up. No retakes: one sitting.
The live checks under the tasks are provisional. The final grading runs on my side. Everything in it was rehearsed in the labs.
On to Episode 6.
An hour ago the investor walked into the shop unannounced. It’s due-diligence week: before she signs anything, she wants to see how this place actually runs. Tobi offered her a coffee and a spreadsheet he “mostly trusts.”
She didn’t drink the coffee. She walked to the whiteboard, uncapped a marker, and wrote one question:
“Why is everything built from scratch?”
For five sessions you built everything by hand, on purpose. From today, that changes.
For five sessions you worked without AI. From today you may use it, and you stay responsible for every line you hand in.
The course chatbot and every AI tool you will use run on one:
straw plus a token like berry, never the lettersQuestion: “The students opened their ___”
This is why Session I told you: ask the chatbot as specific as possible. Your question fills the window; the model can only use what is in it.
Both are free, both are on the AI Tools page, together about ten minutes:
Turn off both training-data switches in Mistral’s privacy settings before you paste coursework (the AI Tools page shows where). Nothing here needs a credit card.
The investor’s question has an answer: you shouldn’t build it from scratch. Most of what you need is already written.
import a module, then reach for the tools inside it with a dot: math.ceil(...)Tobi has been hand-rolling arithmetic for months…
import math: stop rounding by hand130 pastries need to ship. They go in crates of 48. How many crates? You need to round up: a half-full crate still ships as a whole one.
3
130 / 48 is 2.7…; math.ceil bumps it to 3. No fiddling with “if there’s a remainder, add one.” The tool already knows.
from statistics import ...Sometimes you only want a couple of tools, not the whole box. Import them by name and use them directly, no statistics. prefix:
3.9
4.5
One furious review (a 1.0) drags the mean down to 3.9. The investor asked for the typical rating: median sorts the values and hands back the middle one (4.5), unmoved by one angry customer.
Scan the QR or type the link:
python.tobiasvlcek.com/notebooks/ex_06_a/
Any questions? Let me know!
Some module names are long, or you’ll type them fifty times. import ... as gives a module a nickname for the rest of the file:
4.5
stats.median is the same tool as statistics.median, just less to type. You’ll meet fixed conventions soon (import pandas as pd); using the community’s nickname makes your code instantly readable to everyone else.
Tobi imports just pi by name, then reaches for it the way he reached for math.ceil. The large pizza has a 15 cm radius. What happens?
a) prints 706.858… b) a TypeError c) a NameError
Predict. Pick a letter, then I reveal the answer.
pi exists, math doesn’tNameError: name 'math' is not defined
c) a NameError: from math import pi puts exactly one name on your desk, pi. Nobody ever created a name called math, so math.pi fails at the first dot.
You don’t have to memorize a module. Python will tell you what’s in it and what each tool does:
dir() is the drawer of tools; help() is the little instruction card taped to each one. Between them you can explore any module without leaving your editor.
math.ceil rounds up. Its partner math.floor rounds down, but down from a negative number is the tricky part. What does the last line print?
a) -3 b) -2 c) an error
Predict. Pick a letter, then I reveal the answer.
-3
a) -3: floor always heads down the number line, toward more negative. From -2.5, down is -3, not the -2 you’d get by rounding toward zero.
“Down” means smaller, and -3 is smaller than -2. Keep the number line in your head, not the distance to zero.
Scan the QR or type the link:
python.tobiasvlcek.com/notebooks/ex_06_b/
Any questions? Let me know!
random toolbox (1)The investor wants to see how the shop copes with a busy day, but the busy day hasn’t happened yet. So we rehearse it with made-up numbers. The random module deals them:
0.9634912516953094
6
tea
random toolbox (2)[4, 5, 2, 1, 3]
Four tools, four flavors of luck: a raw float, a bounded integer, a pick from a list, and a reshuffle.
The investor leans over and says: “Run it again.” Tobi does, and gets completely different numbers:
[14, 9, 4, 8, 9]
[3, 19, 5, 20, 8]
Two runs, two answers. That’s exactly what random is supposed to do, but it’s useless for due diligence. A projection nobody can reproduce is a projection nobody can trust.
random.seed makes luck repeatablerandom.seed(n) fixes the starting point of the number stream. Same seed → same sequence, every time:
[11, 5, 13, 2, 3]
[11, 5, 13, 2, 3]
Both lines print [11, 5, 13, 2, 3]. The numbers still look random, but now the investor can run it herself and land on the identical result.
The busiest day needs an extra rider. Tobi seeds, picks one, then seeds again with the same number and picks again. Is it the same rider?
a) False: choice picks freely, the seed only steers randint
True: same seed, same stream, same pick
an error: a seed can only be set once per program
True
Ben Ben
b) True. Every random tool draws from the same stream, and re-seeding rewinds it to the start. choice is no exception: after seed(3) it lands on the same item every time.
Tobi seeds once, then builds two lists the same way, without touching the seed in between. Are first and second equal?
a) different: the second list continues where the first stopped
equal: the seed is set, so both come out the same
an error: the stream is empty after three draws
[4, 1, 9]
[8, 8, 5]
a) different. A seed doesn’t freeze random, it fixes the whole sequence. The first list eats the first three numbers of the stream; the second list simply continues from number four.
To get the same list twice, re-seed before each run: it rewinds the stream. One seed, one fixed sequence: that’s a seed’s entire job.
Scan the QR or type the link:
python.tobiasvlcek.com/notebooks/ex_06_c/
Any questions? Let me know!
import math and statistics for investor-grade counts and averages, then use random with a seed to rehearse a busy day she can reproduceDownload your .py before you leave. Closing the tab without downloading loses your work, and downloading is exactly how you handed in the checkpoint at the start of the session.
import math, from statistics import median, import ... as for a nickname. dir() and help() show you what’s inside.random deals the luck (random(), randint, choice, shuffle), perfect for rehearsing a day that hasn’t happened yet.random.seed(n) makes luck repeatable. Same seed → same sequence, every run. A projection you can reproduce is a projection an investor can trust.Next episode: the numbers deck. The shop’s data has outgrown plain lists, and NumPy turns a thousand numbers into a single, fast object.
New this session: the AI Tools page: how and when to use AI in Part II, and the disclosure section your project README needs in Part III.
For more, see the literature list of this course.
Lecture VI - Modules and the Standard Library | Dr. Tobias Vlćek | Home