
If you have any questions during the lecture, feel free to unmute and ask. If you don't want to ask in the Zoom meeting, write the question in the HackMD

Wikipedia:
"Computer programming is the process of building and designing an executable computer program for accomplishing a specific computing task"
Endless possibilities!

| Old versions | Python 3 | 
|---|---|
| Python 1.0 - January 1994 | Python 3.0 - December 3, 2008 | 
| Python 1.0 - January 1994 | Python 3.1 - June 27, 2009 | 
| Python 1.2 - April 10, 1995 | Python 3.2 - February 20, 2011 | 
| Python 1.3 - October 12, 1995 | Python 3.3 - September 29, 2012 | 
| Python 1.4 - October 25, 1996 | Python 3.4 - March 16, 2014 | 
| Python 1.5 - December 31, 1997 | Python 3.5 - September 13, 2015 | 
| Python 1.6 - September 5, 2000 | Python 3.6 - December 23, 2016 | 
| Python 2.0 - October 16, 2000 | Python 3.7 - June 27, 2018 | 
| Python 2.1 - April 17, 2001 | Python 3.8 - October 14, 2019 | 
| Python 2.2 - December 21, 2001 | Python 3.9 - October 5, 2020 | 
| Python 2.3 - July 29, 2003 | |
| Python 2.4 - November 30, 2004 | |
| Python 2.5 - September 19, 2006 | |
| Python 2.6 - October 1, 2008 | |
| Python 2.7 - July 3, 2010 | 

How to seek help:
# A simple loop that adds 2 to a number
i = 0
while i < 10:
    u = i + 2
    print('u is',u)
    i += 1
u is 2 u is 3 u is 4 u is 5 u is 6 u is 7 u is 8 u is 9 u is 10 u is 11
'this is a string'
"this is also a string"
3       # here we can put a comment so we know that this is an integer
3.14    # this is a float
True    # this is a boolean
type('this is a string')
str
[3, 5, 7, 4, 99]       # this is a list of integers
('a', 'b', 'c', 'd')   # this is a tuple of strings
{'a', 'b', 'c'}        # this is a set of strings
{'a':3, 'b':5, 'c':7}  # this is a dictionary with strings as keys and integers as values
type([3, 5, 7, 4, 99])
list
That depends on their type:
'a string'+' another string'
#2 + 3.4
#'a string ' * 3.2
'a string another string'
Type Operations
int                  +  -    /  **  %  // ...
float                +  -    /  *  %  // ...
string                     + 
Used to store values and to assign them a name.
Examples:
i       = 0counter = 5snpname = 'rs2315487'snplist = ['rs21354', 'rs214569']    width  = 23564
height = 10
snpname = 'rs56483 '
snplist = ['rs12345','rs458782']
width * height
235640

Allowed:                                 Not allowed:
Var_name                                         2save
_total                            *important
aReallyLongName                                            Special%
with_digit_2                                With    spaces
dkfsjdsklut   (well, allowed, but NOT recommended)
NO special characters:
+ - * $ % ; : , ? ! { } ( ) < > “ ‘ | \ / @
→ Notebook Day_1_Exercise_1 (~30 minutes)


width  = 5
height = 3.6
snps   = ['rs123', 'rs5487']
snp    = 'rs2546'
active = True
nums   = [2,4,6,8,4,5,2]
float(width)
5.0

x = 4
y = 3
z = [2, 3, 6, 3, 9, 23]
pow(x, y)
64
x = 5
y = 3
#x = 5.14
#y = 3.14
y != x
True
x = 2
y = 3
x == 2 and y == 5
x = [2,4,7,3,5,9]
y = ['a','b','c']
2 in x
4 in x and 'd' in y
False
# A simple loop that adds 2 to a number and checks if the number is even
i    = 0
even = [2,4,6,8,10]
while i < 10:
    u = i + 2
    print('u is '+str(u)+'. Is this number even? '+str(u in even))
    i += 1
u is 2. Is this number even? True u is 3. Is this number even? False u is 4. Is this number even? True u is 5. Is this number even? False u is 6. Is this number even? True u is 7. Is this number even? False u is 8. Is this number even? True u is 9. Is this number even? False u is 10. Is this number even? True u is 11. Is this number even? False
# A simple loop that adds 2 to a number, check if number is even and below 5
i    = 0
even = [2,4,6,8,10]
while i < 10:
    u = i + 2
    print('u is '+str(u)+'. Is this number even and below 5? '+\
          str(u in even and u < 5))
    i += 1
u is 2. Is this number even and below 5? True u is 3. Is this number even and below 5? False u is 4. Is this number even and below 5? True u is 5. Is this number even and below 5? False u is 6. Is this number even and below 5? False u is 7. Is this number even and below 5? False u is 8. Is this number even and below 5? False u is 9. Is this number even and below 5? False u is 10. Is this number even and below 5? False u is 11. Is this number even and below 5? False
x = 5
y = 7
z = 2
(x > 6 and y == 7) or z > 1
x > 6 and (y == 7 or z > 1)
# and binds stronger than or
x > 4 or y == 6 and z > 3
x > 4 or (y == 6 and z > 3)
(x > 4 or y == 6) and z > 3
False
# BEWARE!
x = 5
y = 8
#xx == 6 or xxx == 6 or x > 2
x > 42 or (y < 8 and someRandomVariable > 1000)
False
Python does short-circuit evaluation of operators
Lists (and strings) are an ORDERED collection of elements where every element can be accessed through an index.

l = [2,3,4,5,3,7,5,9]
s = 'some longrandomstring'
'o' in s
l[1]
s[0:7]
s[0:8:2]
s[-2]
l[0] = 42
s[0] = 'S'
Mutable objects can be altered after creation, while immutable objects can't.
Immutable objects: Mutable objects:
int                   •  listfloat                 •  setbool                •  dictstrtuple
s = [0,1,2,3,4,5,6,7,8,9]
s.insert(5,10)
s.reverse()
s
[9, 8, 7, 6, 5, 10, 4, 3, 2, 1, 0]
→ Notebook Day_1_Exercise_2 (~30 minutes)
fruits = ['apple','pear','banana','orange']
print(fruits[0])
print(fruits[1])
print(fruits[2])
print(fruits[3])
apple pear banana orange
fruits = ['apple','pear','banana','orange']
for fruit in fruits:
    print(fruit)
#    print('end')
print('end')
apple pear banana orange end
Always remember to INDENT your loops!
For loop¶fruits = ['apple','pear','banana','orange']
for fruit in fruits:
    print(fruit)
print('end')
apple pear banana orange end
While loop¶fruits = ['apple','pear','banana','orange']
i = 0
while i < len(fruits):
    print(fruits[i])
    i = i + 1
apple pear banana orange
For loop
Is a control flow statement that performs a fixed operation over a known amount of steps.
While loop
Is a control flow statement that allows code to be executed repeatedly based on a given Boolean condition.
Which one to use?
For loops better for simple iterations over lists and other iterable objects
While loops are more flexible and can iterate an unspecified number of times
→ Notebook Day_1_Exercise_3 (~20 minutes)
if/else  statements
shopping_list = ['bread', 'egg', 'butter', 'milk']
if len(shopping_list) > 5:
    print('Go shopping!')
else:
    print('Nah! I\'ll do it tomorrow!')
Nah! I'll do it tomorrow!
shopping_list = ['bread', 'egg', 'butter', 'milk']
tired         = False
if len(shopping_list) > 5:
    if not tired:
        print('Go shopping!')
    else:
        print('Too tired, I\'ll do it later')
else:
    if not tired:
        print('Better get it over with today anyway')
    else:
        print('Nah! I\'ll do it tomorrow!')
Better get it over with today anyway
Any longer pieces of code that have been used and will be re-used SHOULD be saved
Two options:
Examples
./script.pypython script.pyfruits = ['apple','pear','banana','orange']
for fruit in fruits:
    print(fruit)
apple pear banana orange

fh = open('../files/fruits.txt', 'r', encoding = 'utf-8')
for line in fh:
    print(line)
fh.close()
apple pear banana orange
'string'.strip()       Removes whitespace
'string'.split()       Splits on whitespace into list
s  = '  an example string to split with whitespace in end   '
sw = s.strip()
sw
#l  = sw.split()
#l
#l  = s.strip().split('\t')
#l
'an example string to split with whitespace in end'

fh = open('../files/fruits.txt', 'r', encoding = 'utf-8')
for line in fh:
    print(line.strip())
fh.close()
apple pear banana orange
 How much money is spent on ICA?
 
How much money is spent on ICA?
fh    = open("../files/bank_statement.txt", "r", encoding = "utf-8")
total = 0
for line in fh:
    expenses = line.strip().split()  # split line into list
    store    = expenses[0]           # save what store
    price    = float(expenses[1])    # save the price
    if store == 'ICA':               # only count the price if store is ICA
        total = total + price
fh.close()
print('Total amount spent on ICA is: '+str(total))  
Total amount spent on ICA is: 1186.71

How much money is spent on ICA in September?
fh    = open("../files/bank_statement_extended.txt", "r", encoding = "utf-8")
total = 0
for line in fh:
    if not line.startswith('store'):
        expenses = line.strip().split()
        store    = expenses[0]
        year     = expenses[1]
        month    = expenses[2]
        day      = expenses[3]
        price    = float(expenses[4])
        if store == 'ICA' and month == '09':   # store has to be ICA and month september
            total = total + price
fh.close()
out = open("../files/bank_statement_results.txt", "w", encoding = "utf-8")   # open a file for writing the results to
out.write('Total amount spent on ICA in september is: '+str(total))
out.close()
For loops and While loopsIf/Else statement are used when deciding actions depending on a condition that evaluates to a booleanIf/Else statements can be nestedopen() can be used to read in text files→ Notebook Day_1_Exercise_4