Hands On¶
Questions¶
- What uses do the different brackets have:
[],(),{} - Give a possible use for each of the following container: Dictionary, Set, Tuple
- What is a keyword-argument? Where in the list of arguments do keyword-arguments belong?
- You can type
my_func?to geht help onmy_func. If you wrotemy_func, what do you need to do to get a useful help-text? - When do you use
for-loops, whenwhile? Give an example of both loops. - What is the difference between
break,continueandreturn? - After reading the content of a file, how do you restart reading from the first line?
- Why is it a good idea to use a contect-manager when reading files?
- What is the difference between a string defined with
"String"andr"String" - What does
sys.argv[0]return?
Tasks¶
- Improve your refugee code
- store the three data variables (
years,countries,refugees) into a sensible data structure. - adapt the plot function such that it accepts arbitrary keyword-arguemnts and passes unknown arguments on to the plot function.
- add a command-line interface using
argparse
- store the three data variables (
- In the data directory you find
gdp-europe.csv. This file contains the GDP per capita for the same countries as refugees.- Add the data to your script.
- Calculate and plot the refugee number relative to the GDP.
- Create a scatter plot with all countries.
- Implement a library, that provides basic formulas from Macro- or Microeconomics. (You probably know better what you could implement then me.) Each formula should be implemented as a separat function taking the relevant parameters as arguments.
- Write a simple command-line interface that provides access to the functions in your library from above. (You can either expect the relevant input on the command line or ask for it interactively.
- Have a look at https://docs.python.org/3.6/library/turtle.html. Implement something nice with it :-)
Brute Force¶
Assume you find the following password comparison in the source code.
from hashlib import md5
...
if md5(pin.encode()).digest() == hash:
...
In addition you know that the pin is 1 to 4 digits long.
md5 is a bad hashing algorithm for passwords. So it should be straight forward to brute-force the password. (try all possible combinations)
In [1]:
hash = b'P\xc1\xf4NBe`\xf3\xf2\xcd\xcb>\x19\xe3\x99\x03'
Once this works adapt the code to use argon2 instead of md5.
You will still be able to brute-force such a short pin.
It should however take significantly longer.
Small Problems¶
Download the file exercises.zip and look at the .py files. Choose one ore more of the problems and solve them.