Leren Programmeren in Python

Sessie 1

Sam Vervaeck

  • Sam Vervaeck
  • Verhaal begint in 2006
  • Beetje computerwetenschappen
  • Open-source werk
  • 24/7

Sessies

  • Bouwstenen van een programma
  • Programmeerstijlen

Sessie 1

  • Expressies
  • Variabelen
  • Statements
  • Functies

Boring!

Python

  • Guido van Rossum
  • Scripting taal
  • Dynamisch getypeerd
  • Relatief traag maar flexiebel

Toepassingen

  • AI/machine learning
  • Robotica
  • IoT
  • Websites
  • ...

REPL

Read-Eval-Print-Loop

Expressies

1

2

-27

54984388273490

..., -2, -1, 0, 1, 2, 3, ...

9223372036854775807*

*op mijn computer

<expr>
<expr> = 0
<expr> = 1
<expr> = 2
<expr> = 3
...

1 + 1

126943 - 24

<expr> + <expr>
<expr> - <expr>
<expr> * <expr>
<expr> / <expr>

1 + 2 * 3

7?
9?

( <expr> )

(1 + 2) * 3

of

1 + (2 * 3)

Operator Precedence

**

*, /, //, %

+, -

==, !=, >, >=, <, <=

Net als in de wiskunde!

2 ** 10 + 37

(2 ** 10) + 37

Oefening

Trek tien eenheden af van twintig en deel het resultaat door vijf

20 - 10 / 5

20 - (10 / 5)

(20 - 10) / 5

✅

(20 - 10) / 5

Associativiteit

1 * 2 * 3 * 4

❌

1 * (2 * (3 * 4))

1 * (2 * 12)

1 * 24

24

✅

((1 * 2) * 3) * 4

(2 * 3) * 4

6 * 4

24

* is links-associatief

Variabelen

x = 42

x + 1

<name> = <expr>
x = 1
x = 5
x + 1

Is het resultaat van x + 1 2 of 6?

6

Nieuwe waarden overschrijven oude waarden!

Oefening

x = 1
y = x * 2
x = 10
y * 2

Wat is het resultaat van de laatste y * 2?

4

Booleans

True

False

1

0

not <expr>
not True
not is_sunny
not is_rainy
not (2 ** 10 > 10000)

Waarheidstabel

x not x
0 1
1 0
<expr> and <expr>
num_passengers >= 2 and num_passsengers <= 4
ready_for_launch = boosters_ready and cockpit_ready and fueled
a b a and b
0 0 0
0 1 0
1 0 0
1 1 1
<expr> or <expr>
authorized = is_moderator or is_vip
a b a or b
0 0 0
0 1 1
1 0 1
1 1 1

Oefening

Een NAND-gate heeft de volgende waarheidstabel:

a b a nand b
0 0 1
0 1 1
1 0 1
1 1 0

Bedenk een expressie die NAND correct uitdrukt.
Test de expressie met een paar voorbeelden.

not (a and b)

Strings

'Dit is een stuk tekst.'
'Een ander stuk tekst!'
's3cr3tp@ssw0rd'
'Emojis gaan ook: 🤯😮'
'133'
"Dit is een stuk tekst."
"Een ander stuk tekst!"
"s3cr3tp@ssw0rd"
"Emojis gaan ook: 🤯😮"
"133"
'<chars>'
"<chars>"
'Emoji's zijn heel leuk'
SyntaxError: unterminated string literal (detected at line 1)

Escape sequences

'Emoji\'s zijn heel leuk
'\n'
'\t'
'\n'
'\x0A'
'\u0398'
'\U0001F600'

Format strings

f'Uw volgnummer is {count}'
f"Beste {fullname}, bedankt voor uw bestelling nummer {ordernumber}."
f"Twee maal {x} is {x * 2}"
{ <expr> }

Oefening

Neem aan dat name gegeven is. Maak een string via interpolatie die de gegeven persoon begroet. De groet mag je zelf kiezen.

>>> name = "Jan"
>>>

Functies

Hoe hergebruiken we stukken code?

Abstractie

def foo(a, b):
    return a * 2 + b ** 10
def <name>(<param>, ...):
    <statement>
    ...
return <expr>

Statements

<name> = <expr>
return <expr>
def sum(x, y):
    return x + y

sum(1, 2)
sum(5, 5)
sum(934830, -1)
<expr>(<expr>, ...)
print(42)
print(x)
def test():
    print(1)
def test():
    print(1)

test()
def weird():
    print(1)
    return 42
    print(2)

weird()

Waar is de 2?

Een return-statement stopt de uitvoering van de functie waar het deel van uitmaakt.

def process_customer(customer):
    if is_not_paying(customer):
        return
    initialize_cluster()
    expensive_task_on_cluster()
    result = collect_results()
    return result

Oefening

Vind een functie genaamd xor die enkel True geeft indien ofwel a waar is ofwel b waar is maar nooit de twee tegelijk waar of tegelijk onwaar zijn.

Dit wordt ook wel een exclusieve of genoemd.

a b a xor b
0 0 0
0 1 1
1 0 1
1 1 0
def xor(a, b):
    return (a and not b) or (not a and b)

of

def xor(a, b):
    return not (a and b) and not (not a and not b)

Een builtin

print(text)
>>> print("Hallo daar!")
Hallo daar!
>>> 
message = "Opdracht geslaagd."
print(message)

Conditionals

if ready_to_launch:
    print("Raket wordt gelanceerd ...")
else:
    print("Raket kon niet de ruimte in worden geschoten.")
if <expr>:
    <statement>
    ...
elif <expr>:
    <statement>
    ...
else:
    <statement>
    ...
if naam == 'bob':
    print("Hey Bob, hoe gaat het ermee?")
elif naam == 'james':
    print("Oh James, ben jij het weer?")
elif naam == "vanessa":
    print("Lang geleden, Vanessa!")
else:
    print("Hey, ik weet niet wie je bent.")
if temperature < 20:
    conn = connect_to_heating()
    conn.send_message("more_gas")
    conn.close()

Statements

<name> = <expr>
return <expr>
if <...>

Enkele builtins

int(text)
str(value)
input(prompt)
>>> input("Hoe oud ben je? ")
Hoe oud ben je? 31
'31'
>>>
answer = input("Hoe oud ben je? ")
>>> answer = input("Hoe oud ben je? ")
Hoe oud ben je? 31
>>> answer
'31'
>>> answer > 50
Traceback (most recent call last):
  File "<python-input-7>", line 1, in <module>
    answer > 50
TypeError: '>' not supported between instances of 'str' and 'int'
>>> answer
'31'
>>> int(answer)
31
>>> int(answer) > 50
False
>>> age = int(answer)
>>> age
31
>>> str(age)
'31'
answer = int(input("Hoe oud ben je? "))

if answer >= 50:
    print("Wauw zo oud!")
else:
    print("Da's nog jong.")

Oefening

Vraag aan de gebruiker een nummer en print of het even of oneven is.

x = int(input("Kies een willekeurig nummer: "))

if x % 2 == 0:
    print("Nummer is even.")
else:
    print("Nummer is oneven.")

Operaties op strings

>>> s = 'foobar'
>>> s[0]
'f'
>>> s = 'foobar'
>>> s[1]
'o'
>>> s[2]
'o'
>>> s[3]
'b'

>>> s = 'foobar'
>>> s[3:]
'bar'
<expr>[<start>:<stop>:<step>]

start, stop en step zijn allen <expr> en geheel optioneel

Oefening

Vind de waarde van stop in de uitdrukking 'foobar'[4] zodat deze nog altijd hetzelfde resultaat geeft

'foobar'[4:5]
>>> s = 'foobar'
>>> s[-1]
'r'
>>> s = 'foobar'
>>> s[-2]
'a'
>>> s[-3]
'b'
>>> s = 'foobar'
>>> s[-5:-1]
'ooba'
>>> s = 'foobar'
>>> i = 1
>>> j = 4
>>> s[i:j-1]
'oo'