Slides 2021/22
Part A
Lab A.1
Thursday 23 Sep 2021
Links
lab site: sciprog.davidleoni.it
lab presentation (slides)
Installation from sciprog, with links to relevant SoftPython stuff
in particular, try installing the toc2 extension for Jupyter for easy navigation
Tools and Scripts on softpython: Jupyter usage and other things are described more in detail, try finishing it at home.
IMPORTANT: Friday 24 September lab is cancelled. Regular meetings will start again from Thursday 30 September.
Lab A.2
Thursday, Sep 30th, 2021
Tools recap
Visual Studio Code mention
lab repl: https://replit.com/@DavidLeoni2/sciprog-ds-lab-2021-22
Exercises how to:
I will update softpython / sciprog often, so please download stuff on lab day
NOTE 1: when I ask you think what a certain code does, write down the answer, don’t just think about it - to pass the exam you must have zero uncertainties about syntax & expressions
NOTE 2: many times I will ask you to not use
if
statements, even if that solution would be more elegant & short: the reason is I want you to get familiar with boolean expressions, even if they may look ugly.
Basics
In class: Basics 4 challenge
The rest is left as homework:
Strings
In class: Strings 5 - Challenge
The rest is left as homework:
References
Lab A.3
Friday, Oct 1st, 2021
Lists:
In class: Lists 5 - Challenges
The rest is left as homework:
Tuples:
In class: Tuples 2 - Challenges
The rest is left as homework:
References
EXTRA challenges
Since for now I want you to focus on expressions, first challenges on softpython don’t require loops. Still, if you want, you can generalize them with following extra tasks:
Lists - Super DUPER sorted: 2) Generalize previous approach so it works with and number of words. For this you will need cycles and/or if statements
Lists - Toys in the Attic: 2) Generalize the previous approach. Imagine you have an
attic
which has an unspecified number of categories (here it’s 5 but it could 1000):
attic = [3, 'doll', 'lego', 'minicar',
2, 'frame', 'brushes',
4, 'bike', 'pump', 'racket', 'ball',
2, 'vase', 'fertilizer',
3, 'old chair','lamp deco', 'stool']
and you want to obtain a list of lists like this:
[
['doll','lego','minicar'],
['frame', 'brushes'],
['bike', 'pump', 'racket', 'ball'],
['vase','fertilizer'],
['old chair','lamp deco','stool']
]
(without caring about the variables toys
, painting
and sports
)
In this case, you can and should use cycles and/or if statements when needed.
Lab A.4
Thursday, Oct 7th, 2021
References
(sets)
Passerini didn’t cover them, if you want have a look at
Sets 2 - Challenge NOTE: I moved the challenge to for 5 - sets
They may be useful to start, since keys in dictionaries behave much like sets.
Dictionaries
In class: Dictionaries 5 - Challenges
they always have a fixed number of inputs, but you may wish to generalize them with loops
The rest is left as homework:
Conditionals
In class: if 2: challenge
The rest is left as homework:
References: Andrea Passerini - complex statements
only for the pros
on repl: fill_sides
Lab A.5
Friday, Oct 8th, 2021
In class:
References: Andrea Passerini - complex statements
At home:
for loops
while loops: while 1. intro
sequences: sequences 1. intro
Lab A.6
Thursday, Oct 14th, 2021
In class:
functions intro: some discussion on function categories
functions - error handling and testing: when to use them
References: Andrea Passerini slides - functions
At home:
Functions:
Matrices as lists:
Mixed structures:
Lab A.7
Friday, Oct 15th, 2021
In class:
Lab A.8
Thursday, Oct 21st, 2021
IMPORTANT NOTE:
today’s lab (Thursday ) will start at 16:30 in b106
on Friday 22nd there will be no lab
next week labs restart regularly
In class:
Line formats challenge (Spam killer)
CSV challenge (Over the top)
References: Andrea Passerini slides - modules and programs
At home:
Lab A.9
Thursday, Oct 28th, 2021
Looking at the midterm
After this lab, consider trying the old Part A exams which don’t display networks.
IMPORTANT: there is a References part on SoftPython, where you can find extra resource for Part A of this course. In particular, I recommend doing:
the explicitly named exercises from Edabit and LeetCode, plus you can find more on HackerRank and Geeks for Geeks
have a look at Foundations of Python programming book in particular the worked projects
If you struggle with programming, the stuff above is not optional!
In class:
References:
At home:
Lab A.10
Friday, Oct 29th, 2021
In class:
References:
At home:
Lab A.11
Thursday, Nov 4th, 2021
Today we are going to see applications, particular how to display relational data.
Note focus in Part A is just displaying, not exploration algorithms (which we will see in Part B)
First install required libraries (graphviz, pydot, networkx)
If for some reason GraphViz doesn’t work on your system: ask/mail mail me, and in the meanwhile you could use an unholy hack on repl which also uses the online service Gravizo and matplotlib (you can also run it from your laptop). Just run it, wait for the thing to load all the modules, and you should see some graph - notice you might need to properly center it.
Looking at the midterm
After this lab, consider trying the remaining old Part A exams which display networks.
In class:
In class try doing one exercise per type, es:
matrices: Trichain, Bipartite (from soft import draw_mat)
adjacency lists: Friends (from soft import draw_adj)
networkx: Offshore (from soft import draw_nx)
At home:
Relational data 3: Simple statistics (contains also some matplotlib charts)
Lab B.1
Thursday Nov 11th, 2021
New tutoring service
by Gabriele Masina (gabriele.masina (guess what) studenti.unitn.it) has been set up on the following timetable starting from Monday 15 november until Wednesday 15 december (included)
Mondays: 9:30-11:30 A202
Wednesdays: 9:30-11:30 A202
Part B Focus
complex data structures
perfomance
How:
big .py files
debugging
testing
VSCode:
From now on we will:
only use Visual Studio Code
only edit .py files
Read:
Collaborative editing with VSCode: for this year there’s hopefully no need to use it, but sometimes you might find it handy, in case see how to install sharing extension and sharing test runs
Btw, if you want you can even load jupyter notebooks (.ipynb) inside VSCode
New testing: In part B we use unittest: see errors and testing on sciprog
in particular, DO READ TROUBLESHOOTING - you are very likely to encounter problems
Let’s go object oriented: OOP (only first part, next time we will do challenges together)
Lab B.2
Thursday Nov 18th, 2021
OOP
Indexing
Have a look at Indexing chapter: probably you will have a hard time understanding the exercises and your solution will look different from proposed ones: try asking yourself why indexing with dictionaries might save computation time
From now on, in general try avoiding:
in
operator on sequences like strings, lists, tuples: it scans the whole sequence!search methods (
.find
,.index
,.remove
…)in particular methods from strings (
.replace
,etc): PartB is about algorithms, not Python tricks!
pop(k)
(butpop(-1)
is fine)needlessly using slices, they create new data structures!
Lab B.3
Friday Nov 19th, 2021
worksheets on sciprog:
NOTE: the worksheet is in progress, I will surely add material on multiple recursion
In general, when you don’t know how to tackle a recursive problem, first try the SimpleFP way and then ModAcc
Simple functional programming (SimpleFP)
immutability
very limited instructions set
never re-assign variables
always create NEW memory regions
don’t care about performance
Recursion with modifiable accumulators (ModAcc)
indexes instead of slicing
extra accumulators variables
helper functions
you can mutate accumulators
care more about performance
References:
Lab B.4
Thursday Nov 25th, 2021
I split recursion into many pages and added stuff, see Recursion 1 - simplefp, Recursion 2 - accumulators and indexes and Recursion 4 - challenges
Today we see:
Lab B.5
Friday Nov 26th, 2021
In lab:
More Algorithm analysis
-
Selection sort
quicksort
At home:
Other sorting (insertion sort, merge sort, …)
Lab B.6
Thursday Dec 2nd, 2021
In lab:
LinkedLists 1: the art of
scanning with
while
pointers
cutting
Please start doing exercises in Part B references
At home:
Stacks: in particular, make sure to understand the Train race exercise
Linked list2 challenges (will add more, also during tutoring)
Lab B.7
Friday Dec 3thrd, 2021
In lab:
Queues 1 intro: ItalianQueue (it’s actually a LinkedList)
Again: Please start doing exercises in Part B references
At home: try finishing whole Queues worksheets
Lab B.8
Thursday Dec 9th, 2021
XI COMMANDMENT: Never ever search keys in a dictionary with looping!
DO NOT write code like this, it’s \(O(n)\):
for key in d:
if key == 'searched key':
do something ...
USE instead in
operator which only takes \(O(1)\)
if 'searched key' in d:
do something
Looping on dictionaries kills performance and in Part B is often a fatal mistake, many people still have this bad habit. Please (re) read softpython - iteration in dictionaries and complexity - dictionaries
Today:
At home: try to finish whole Binary trees worksheet
Yet again: Please start doing exercises in Part B references
Lab B.9
Friday Dec 10th, 2021
Generic trees, at home: try to finish whole Generic trees worksheet
Further exercise: try doing bintree exercses also on generic trees.