Professional Documents
Culture Documents
DIGI111-Algorithms and Programming
DIGI111-Algorithms and Programming
DIGI111-Algorithms and Programming
Hva er programmering?
programmtekst
Språk
class HelloWorld
Java: {
public static void main(String args[])
{
System.out.println("Hello, World");
}
}
Piet:
brainf***: ++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
https://en.wikipedia.org/wiki/Esoteric_programming_language
Programmering
a = 7 - 5
tilordning 12 12
“Hei” “Hei”
11 % 3 2
length = 5.0
width = 2.0
height = 1.2
volume = length * width * height
a = 5.0
b = 2.0
c = 1.2
d = a * b * c
bird = 5.0
yellow = 2.0
water = 1.2
duck = yellow * water * bird
Betingelser / Conditionals
if elif else
n = input("A number: ")
n = int(n)
if n > 100:
print('Yay!')
print('You know big numbers')
print('Bye bye')
A number: 16435
A number: 7 Yay!
Bye bye You know big numbers
Bye bye
Betingelser / Conditionals
if elif else
alle uttryk som har
bool verdi (True/False)
kan stå her
if True / False
:
4 kun hvis True
4 kun hvis True
4 kun hvis True
resten av programmet
resten av programmet
if True / False
:
4 kun hvis True
4 kun hvis True
4 kun hvis True
else:
4 kun hvis False
4 kun hvis False
4 kun hvis False
resten av programmet
resten av programmet
if True / False
:
4 kun hvis True
n = input("A number: ")
n = int(n)
4
if
kun
n > 100:
hvis True
4 kun hvis
print('Yay!') True
print('You know big numbers')
else:else:
print("That’s quite small!")
h
*h*
---
e
*e*
---
i
*i*
---
Løkker / Loops — for
range(4)
for variable
in "xyzq"
[ A, B, C, D ] :
4 for hvert element
4 4x for hvert element
4 for hvert element
resten av programmet
resten av programmet
Funksjoner / functions
def doublesum(x,y,z):
Funksjonsdefinisjon
return 2*(x+y+z)
26
12
def ( ):
input
navn
A, B, C, D
4 gjør noe
4 gjør noe
4
return resultat
resten av programmet
x = navn (3,4,5,6)
def ( ):
input
navn
A, B, C, D
4 gjør noe
4 gjør noe
4
return resultat
resten av programmet
x = navn (3,4,5,6)
resultat
Processor,
Program
Memory
Operating system
Processor,
Memory
Operating system
Processor,
Memory
if 'e' in x:
score = score + 1
-33
if len(x) == 5:
score = -3 * score
print(score)
a = 5
b = 7
while a < b: 12
c = a + b
print(c)
8
b += 2 17
a += 3
print(a)
11
Funksjoner / functions
Expression / Uttryk Value / Verdi
len("Hei") 3
math.sqrt(2) 1.4142
abs(-3.2) 3.2
max(3,7) 7
float("55") 55.0
resultat /
navn argument /
verdi
parameter
Funksjoner / functions
def doublesum(x,y,z):
Funksjonsdefinisjon
return 2*(x+y+z)
26
12
programmflyt
def ( ):
input
navn
A, B, C, D
4 gjør noe
4 gjør noe
4
return resultat
resten av programmet
x = navn (3,4,5,6)
def
def ( ):
input
navn
A, B, C, D
4 gjør noe
4 gjør noe
4
return resultat
resten av programmet
x = navn (3,4,5,6)
resultat
Scope
def doublesum(x,y,z):
tmp = x+y+z lokale variabler, kun i funksjonen
return 2*tmp
x = 5
globale variabler
tmp = 7
ds = doublesum(1,1,1)
def doublesum(x,y,z):
print(x,tmp,ds) global tmp
tmp = x+y+z
return 2*tmp
5 7 6
x = 5
tmp = 7
ds = doublesum(1,1,1)
print(x,tmp,ds)
5 3 6
def doublesum(x,y,z):
sum = x+y+z
return 2*sum
len("Hei") 3
math.sqrt(2) 1.4142
abs(-3.2) 3.2
max(3,7) 7
float("55") 55.0
def subtract(a,b):
a += b
return a 17
15
y = add(12,3)
x = subtract(10,7)
print(x)
print(y)
list / [… , … , … , …]
x = [ 5, 7, 3, 8 ]
y = [ 1, 3.141, 'hei', True ]
Expression / Uttryk Value / Verdi
[ ] []
[1] [1]
x [5,7,3,8]
x.append(99)
x [5,7,3,8,99]
[1,2] + [5,6] [1,2,5,6]
len(y) 4
y[2] 'hei'
y[1:3] [3.141,'hei']
list-funksjoner
• https://docs.python.org/3/tutorial/
datastructures.html#more-on-lists
list.append(x) list.index(x)
list.extend([3,4,5]) list.count(x)
list.insert(i,x) list.sort()
list.remove(x) list.reverse()
list.pop() list.copy()
list.clear()
nyttige string-funksjoner
• str.split(sep) -> liste av ord, kan angi sep, f.eks. '\n' ','
a = """Many
different
lines 'Many\ndifferent\nlines'
"""
b = a.split() ['Many', 'different', 'lines']
tlf = {
'Armin' : 3542,
'Mikasa' : 1234,
'Eren' : 5125,
}
tlf['Eren'] 5125
tlf['Levi'] = 4545
tlf.items()
dict_items([('Armin', 3542), ('Mikasa', 1234), ('Eren',
5125), ('Levi', 4545)])
dict: dictionary { a:x, b:y, c:z }
• bruk i løkker: dict_items([('Armin', 3542), ('Mikasa', 1234),
('Eren', 5125), ('Levi', 4545)])
Armin —- 3542
Mikasa —- 1234
Eren —- 5125
Levi —- 4545
File I/O
• open(filename, mode) mode: read, write, append
with open(“some.txt”,”r”) as f:
all_in_one = f.read()
with open(“another.txt”,”r”) as f:
list_of_lines = f.readlines()
with open(“third.txt”,”r”) as f:
for line in f:
one_line = line
File I/O
• open(filename, mode) mode: read, write, append
in = ‘inputdata.txt’
out = ‘reverse.txt’
with open('alice.txt') as f:
for line in f:
line = line.split()
…
Løsningseksempel
bokstaver i alice.txt
• Les inn alice.txt og
tell hvor mange ganger hver bokstav finnes i teksten
with open('alice.txt') as f:
for line in f:
for bokstav in line:
…
import og modules
# helpers.py
def spam(x):
s = 'spam'
return f'{s}, {s}, {s}, {x} and {s}.'
N_A = 6.02214e+23
# work1.py
# work3.py
# work4.py
from helpers import N_A, spam
from helpers import N_A as L, spam as foo
a = N_A
b = spam('eggs’) a = L
b = foo('eggs’)
import og modules
# helpers.py
def spam(x):
s = 'spam'
return f'{s}, {s}, {s}, {x} and {s}.'
N_A = 6.02214e+23
(lokalt)
from helpers import N_A N_A
from math import sin,pi sin
ikke
pi
a = N_A
a
tilgjengelig
c = 27
d = sin(pi) c
e = a + c + d d
e
Standard Library
Stor utvalg:
Regular expressions, difflib, textwrap
datetime, calendar
synchronized queue
copy
! 3oor, ceil
! pow, sqrt
! pi, e
fractions
from fractions import Fraction
Fraction(16, -10)
Fraction(123)
Fraction()
Fraction('3/7')
Fraction(' -3/7 ')
Fraction('1.414213 \t\n')
Fraction('-.125')
Fraction('7e-6')
x = Fraction(3,4) + Fraction(1,6)
Fraction(2.25)
x
Fraction(1.1)
x.numerator
x.denominator
calendar
import calendar
calendar.prmonth(2020,02)
random
import random
# random.seed(123456) # reproduserbare resultater
random.choice('abcdef')
random.choice([11, 7.2, 'foo'])
random.choices('abcdefghi', k=100)
random.sample('abcdefghi', k=3)
random.gauss(mu=40.0,sigma=12.0)
matplotlib
matplotlib
https://matplotlib.org/
! bar()
! plot()
! title(), xlabel(), ylabel()
! label=… plt.legend()
! axis(), xlim(), ylim()
! subplot()
! show(), saveMg()
matplotlib gallery
https://matplotlib.org/gallery/index.html
input / print
True / False
betingelser: if
Ulike datastrukturer:
list, set, numpy-array, ...
xs = [2, 7,5,1,4,3,6,8]
2 7 5 1 4 3 6 8
2 5 7 1 4 3 6 8
1 2 5 7 4 3 6 8
1 2 4 5 7 3 6 8
1 2 3 4 5 7 6 8
1 2 3 4 5 6 7 8
Merge Sort
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
Merge Sort
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
merge
2 7 5 1 4 3 6 8
Merge Sort
2 7 5 1 4 3 6 8
2 7 5 1 4 3 6 8
2 7 1 5 4 3 6 8
merge merge
2 7 5 1 4 3 6 8
Merge Sort
2 7 5 1 4 3 6 8
1 2 5 7 4 3 6 8
merge
2 7 1 5 4 3 6 8
merge merge
2 7 5 1 4 3 6 8
Merge Sort
2 7 5 1 4 3 6 8
1 2 5 7 3 4 6 8
merge merge
2 7 1 5 3 4 6 8
2 7 5 1 4 3 6 8
Merge Sort O(N log N)
1 2 3 4 5 6 7 8
merge
1 2 5 7 3 4 6 8
merge merge
2 7 1 5 3 4 6 8
2 7 5 1 4 3 6 8
Branch mispredict 5s
L2 cache reference 7s
Mutex lock/unlock 25 s
def foobar(navn):
x = f"Hei, {navn}!"
return x
x = 1
while x < 100: hvor ofte kjører løkken?
print(x)
x = 2 * x hva printes i terminalen?
from datetime import date
today = date.today()
my_birthday = date(today.year, 6, 24)