"Computer program, detailed plan or procedure for solving a problem with a computer; more specifically, an unambiguous, ordered sequence of computational instructions necessary to achieve such a solution. "
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells."
- Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book
(Själva bevisen lämnas som övning till den ambitiöse men Russels Paradox är en bra startpunkt.)
1
:or och 0
:or som representerar instruktioner och den data som instruktionerna opererar på.10111000
, 00000000
, 10111000
, 10001110
, 11011000
, 11000110
, 00000110
, 10011110
, 00001111
, 00100100
, 11001101
, 00100000
184
, 0
, 184
, 142
, 216
, 198
, 6
, 158
, 15
, 36
, 205
, 32
a
för att representera vanliga heltalet 10
, b
för 11
, osv. upp till f
för 15
b8
, 00
, b8
, 8e
, d8
, c6
, 06
, 9e
, 0f
, 24
, cd
, 20
Binary | Opcode (hex) | Description |
---|---|---|
10000111 |
87 |
Add the contents of register A to that of the accumulator |
00111010 |
3a |
Load data stored in the given memory address |
01111001 |
79 |
Move data from register A to C |
11000011 |
c3 |
Jump to instruction in specified memory address |
11000001 |
c1 |
Pop from stack and copy to memory registers B + C |
MOV AX, 47104
MOV DS, AX
MOV [3998], 36
INT 32
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
print("Hello, World!")
$
används ofta för att representera en godtycklig prompt i böcker och dokumentation.~
/
: roten i filsystemet~
: din hemkatalog~/Downloads
: där filer du laddar ner hamnar~adalo256
: användaren adalo256s hemkatalog/dev/null
: intigheten, filsystemets svarta hål.
: ett alias för arbetskatalogen (eng. working directory), dvs. katalogen vi står i..
: ett alias för föräldrakatalogen (eng. parent directory) till den katalog vi står ipwd
: print working directorycd
: change directorycd /
: flytta till rotkatalogencd ..
: flytta till föräldrakatalogencd -
: flytta tillbaka till den senaste katalogen vi var icd katalognamn
: flytta till underkatalog till arbetskatalogen med namnet katalognamn
(ger fel om den katalogen inte finns)cd
: specialfall som flyttar till hemkatalogen
echo
: skriver ut argument i terminalencd
: byter katalog (arbetskatalog - katalogen man "står i")ls
: visar innehåll i katalogmv
: flytta/döp om fil eller katalogmkdir
: skapa katalogcat
: skriv ut innehåll i filtouch
: skapa ny fil/uppdatera senast ändrad hos existerande filman
: visa hjälptext för kommandonwhich
till räddning!¶$ which ls
/bin/ls
which
visar sökvägen till det program som kommer köras om vi kör kommandot ls
.ls
är alltså ett program lagrad i filen ls
i katalogen /bin
.which
inte ge något svar.python3
i terminalen.exit()
.exit
utan några argumenthello.py
.python3 hello.py
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells." - Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book
1
1
[1, 2]
[1, 2]
float
och int
str
, är en sekvens av tecken som skrivs inom citationstecken.list
, är en sekvens av andra objekt som skrivs inom hakparenteser.["hej", 1]
['hej', 1]
+
, -
, *
, /
: de fyra fundamentala räknesätten addition, subtraktion, multiplikation och division**
: exponentiering (potens, "upphöjt till")//
: heltalsdivision, dvs. division med eventuella decimaler trunkerade%
: modulo (rest vid heltalsdivision)1%3
1
1.0+1
2.0
1+1
hej = 1
hej = 3
hej = [1, 2]
hej
[1, 2]
value
, filename
, player
, age
_
, mellan ordenbook_title
, left_panel
, confirm_button
min_variabel = 10
min_variabel = 3
min_variabel = min_variabel + 1
- min_variabel += 3
+=
, -=
, *=
, /=
, huvudrad som inleds med ett nyckelord
sats 1
sats 2
...
sats n
try
-satser m.fl.round(2/3)
1
return_hello()
'hello'
double_value(2)
4
avg_value(1, 3)
2
Definition av dubbleringsfunktionen med mer bekant notation.
I Python:
def funktionsnamn(parameter1, parameter2, ..., parameterN):
sats1
sats2
sats3
...
def
följt av namnet på den funktion man definierar (skapar) och en sekvens av parametrar inom parenteser och slutligen ett :
.:
-tecknet är indenterade, dvs. indragna, med 4 mellanslag och utgör ett block.def
eller filen tar slut.def
och return
samt skiljetecknet :
kan vi definiera funktionen $f(x) = 2x$ i Python.2 * x
beräknas.# f(x) = 2x
# definierad i Python
def f(x):
return 2 * x
# anropa funktionen, spara returvärdet i variabeln
# resultat
resultat = f(10)
def
return
:
innan första raden på det nya blocket#
påbörjar en kommentar, resten av raden ses inte som Pythonkodreturn
-sats?return
-sats så kommer Python automatiskt se till att funktionen returnerar None
None
är det värde som vi använder i Python för att beteckna "inget värde"print()
¶None
print("Hej")
x = 56
namn = "Beata"
print(namn)
print(x + 487)
Hej Beata 543
"\t"
"\n"
"hejsan"
: h |
e |
j |
s |
a |
n |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
my_string[index]
my_string[0]
är det första tecknet i variabeln my_string.my_string[-1]
ger det sista tecknet i variabeln my_string
len()
användas.namn = "Alfred"
# tilldela variabeln namnlängd värdet som len(namn)
# returnerar
namnlängd = len(namn)
# skriv ut värdet i variabeln namnlängd
print(namnlängd)
6
my_string[start:end]
från index start
, inkludera tecknen på alla index mindre än end
my_string[:end]
från första tecknet, inkludera tecknen på alla index mindre än end
my_string[start:]
alla tecken från index start
till slutet av strängen h |
e |
j |
s |
a |
n |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
my_string = "hejsan"
my_string[1:4]
'ejs'
3+3
6
str(3) + str(3)
'33'
str(True)
'True'
studenter = ["Ada", "Bertil", "Cecilia"]
diverse = [5, 3.0, "rosa", [100, 200, 300]]
my_list[start:end]
från index start
, inkludera alla värden med index mindre än end
my_list[:end]
från början, inkludera alla värden med index mindre än end
my_list[start:]
från index start
till slutet av listan 'h' |
'e' |
'j' |
's' |
'a' |
'n' |
---|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
5 |
my_list = ['h', 'e', 'j', 's', 'a', 'n']
my_list[1:4]
['e', 'j', 's']
+
kan användas för att slå ihop två listor till en ny lista. Ordningen spelar roll!frukter1 = ["äpple", "päron"]
frukter2 = ["apelsin", "banan"]
alla_frukter1 = frukter1 + frukter2
alla_frukter2 = frukter2 + frukter1
print(alla_frukter1)
['äpple', 'päron', 'apelsin', 'banan']
print(alla_frukter2)
['apelsin', 'banan', 'äpple', 'päron']
values = [1, 2, 3, 4]
print(values)
[1, 2, 3, 4]
# ändra värde på index 2
values[2] = "hoppsan"
print(values)
[1, 2, 'hoppsan', 4]
frukter = ["apelsin"]
print(frukter)
['apelsin']
frukter = frukter + ["banan"]
print(frukter)
['apelsin', 'banan']
frukter = ["apelsin"]
print(frukter)
['apelsin']
frukter = ["banan"] + frukter
print(frukter)
['banan', 'apelsin']
+
med listor ändrar inte på operandernacharacters1 = ["a", "b", "c"]
characters1 + ["d"]
print(characters1)
['a', 'b', 'c']
list.append(value)
lägger till value till en listatcharacters1.append("d")
print(characters1)t
['a', 'b', 'c', 'd']
random
: har t.ex. funktioner som returnerar slumpvärdensys
: funktioner m.m. som har med systemet att göra (lägre abstraktionsnivå)os
: funktioner m.m. som har med operativsystemet att göra (högre abstraktionsnivå)import
.import random
# funktionen random() i modulen random returnerar ett slumpmässigt
# flyttal mellan 0.0 och 1.0
slumpvärde1 = random.random()
print(slumpvärde1)
0.11297619324484309
# funktionen randint(heltal1, heltal2) i modulen random returnerar ett
# slumpmässigt heltal från heltal1 till och med heltal2.
slumpvärde2 = random.randint(10, 90)
print(slumpvärde2)
72
import random
random
och ser till att det hamnar i namnrymden random
randint(heltal1, heltal2)
i modulen random
kommer man då åt genom att skrivarandom.randint(heltal1, heltal2)
# import-exempel 1
import random
list_of_names = ["Ada", "Bea", "Cecilia", "Dolores"]
def random_greeting1(names):
# random.choice() väljer ut ett slumpmässigt element från
# en sekvens
name = random.choice(names)
print("Hello " + name + "!")
def random_greeting2(names):
# random.randint() slumpar fram ett heltal från ett slutet
# intervall
random_index = random.randint(0, len(names)-1)
print("Hello " + names[random_index] + "!")
random_greeting1(list_of_names)
Hello Ada!
random_greeting2(list_of_names)
Hello Cecilia!
#import-exempel 2
from random import *
list_of_names = ["Ada", "Bea", "Cecilia", "Dolores"]
def random_greeting1(names):
# choice() från modulen random väljer ut ett slumpmässigt
# element från en sekvens
name = choice(names)
print("Hello " + name + "!")
def random_greeting2(names):
# randint() från modulen random slumpar fram ett heltal från
# ett slutet intervall
random_index = randint(0, len(names)-1)
print("Hello " + names[random_index] + "!")
random_greeting1(list_of_names)
Hello Ada!
random_greeting2(list_of_names)
Hello Cecilia!