"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.)
Programmerarna Marlyn Wescoff och Ruth Lichterman implementerar ett program på ENIAC (sannolikt för någon form av ballistisk beräkning).
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 i/home/jodfo01
/home/jodfo01
pwd
: 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_option_ = flaggor/växlar (olika för olika kommandon), t.ex. `-l` för kommandot `ls`
_option_ = flaggor/växlar (olika för olika kommandon), t.ex. `-R` för kommandot `cp`
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
Funktionen return_hello
tar inga argument och returnerar alltid strängen "hello"
.
return_hello()
'hello'
Funktionen double_value
tar ett värde och returnerar det dubbla.
double_value(2)
4
Funktionen avg_value
tar två värden och returnerar genomsnittet av dem.
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!