Initial commit
This commit is contained in:
commit
aecb16fe01
44
README.md
Normal file
44
README.md
Normal file
@ -0,0 +1,44 @@
|
||||
# Grunderna i programmering
|
||||
Här finner du all exempelkod för *Grunderna i programmering (andra utgåvan)*
|
||||
(ISBN: 978-91-983300-5-2).
|
||||
|
||||
Boken går att köpa från [CyberInfo Sverige](https://www.cyberinfo.se/bocker/),
|
||||
[Bokus](https://www.bokus.com/bok/9789198330052/grunderna-i-programmering/) och
|
||||
[Adlibris](https://www.adlibris.com/se/bok/grunderna-i-programmering-9789198330052).
|
||||
|
||||
Är du nyfiken på boken så titta gärna i [innehållsförteckningen](https://www.cyberinfo.se/dokument/gip_innehallsforteckning_2a_utg.html).
|
||||
|
||||
## Errata
|
||||
Trots flera korrekturläsningar och testkörningar av koden har två fel kommit
|
||||
med i boken.
|
||||
|
||||
* Kodexemplet på sidan 103 saknar kolon och parenteser. Rätt
|
||||
kod [finns här](sidan_103_ex1.py).
|
||||
* Det första kodexemplet på sidan 104 har ett felaktigt variabelnamn. Rätt
|
||||
kod [finns här](sidan_104_ex1.py).
|
||||
|
||||
## Baksidetexten
|
||||
**Grunderna i programmering** lär ut de grunder du behöver för att komma igång
|
||||
med programmering i Python och Scratch. Boken börjar med en kort genomgång av
|
||||
Scratch, och visar med några exempel på hur Scratch kan vara användbart för att
|
||||
förstå grundläggande koncept i programmering. I denna introduktion får vi också
|
||||
se hur Pythonkod och Scratchkod faktiskt liknar varandra.
|
||||
|
||||
Därefter går vi vidare med att utforska Python, vilket också är huvudinnehållet
|
||||
i boken. Men innan vi kastar oss in i programmeringens värld får vi en
|
||||
genomgång av hur datorn är uppbyggd, och var i datorn saker som kod, variabler,
|
||||
program med mera sparas. Vi får också se hur allting i datorn hänger samman.
|
||||
När vi väl har denna förståelse är det dags för programmeringen. Vi börjar med
|
||||
datatyper och går sedan vidare med if-satser, loopar, standardbiblioteket och
|
||||
allt som vi behöver kunna för att börja programmera. Allting avslutas med ett
|
||||
större projekt.
|
||||
|
||||
Boken var från början tänkt som studiematerial till kurser i programmering men
|
||||
går utmärkt att använda på egen hand för självstudier. Bokens grundtanke är att
|
||||
lära ut programmering som helhet även om Python används i bokens huvuddel.
|
||||
|
||||
Denna utgåvan har uppdaterats för Scratch 3.0 och Python 3.8. En lång rad andra
|
||||
uppdateringar och förbättringar har också gjorts.
|
||||
|
||||
## Framsidan
|
||||

|
BIN
gip_omslagsbild_2a_utg.png
Normal file
BIN
gip_omslagsbild_2a_utg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
3
sidan_101_ex1.py
Normal file
3
sidan_101_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
x = 10
|
||||
if not (x > 15):
|
||||
print ("Sant, eftersom 10 INTE är större än 15")
|
11
sidan_103_ex1.py
Normal file
11
sidan_103_ex1.py
Normal file
@ -0,0 +1,11 @@
|
||||
x = 10
|
||||
y = 15
|
||||
|
||||
if ((x > 5) and (y < 10)):
|
||||
print ("Jag kommer aldrig skrivas ut")
|
||||
|
||||
if ((x > 5) or (y < 10)):
|
||||
print ("Däremot kommer jag att skrivas ut")
|
||||
|
||||
if ((x == 10) and (y > 12)):
|
||||
print ("Jag kommer också att skrivas ut")
|
3
sidan_104_ex1.py
Normal file
3
sidan_104_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
namn = input("Ange namn: ")
|
||||
print ("Hej " + namn)
|
||||
print (type(namn))
|
7
sidan_104_ex2.py
Normal file
7
sidan_104_ex2.py
Normal file
@ -0,0 +1,7 @@
|
||||
x = input("Ange basen: ")
|
||||
y = input("Ange exponenten: ")
|
||||
x = float(x)
|
||||
y = float(y)
|
||||
s = x**y
|
||||
print (str(x) + " upphöjt till " + str(y) + " blir " + \
|
||||
str(s))
|
6
sidan_105_ex1.py
Normal file
6
sidan_105_ex1.py
Normal file
@ -0,0 +1,6 @@
|
||||
x = input("Ange basen: ")
|
||||
y = input("Ange exponenten: ")
|
||||
x = float(x)
|
||||
y = float(y)
|
||||
s = x**y
|
||||
print ("%.1f upphöjt till %.1f blir %.1f" %(x, y, s))
|
6
sidan_107_ex1.py
Normal file
6
sidan_107_ex1.py
Normal file
@ -0,0 +1,6 @@
|
||||
a = "Hej"
|
||||
b = "Kalle"
|
||||
x = 5
|
||||
y = 4
|
||||
print ("%s %s" %(a, b))
|
||||
print ("%d+%d=%d" %(x, y, x+y))
|
3
sidan_110_ex1.py
Normal file
3
sidan_110_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
lista = ["Kalle", "Lisa", "Linda"]
|
||||
for namn in lista:
|
||||
print ("Hej %s, hur är läget?" %namn)
|
3
sidan_111_ex1.py
Normal file
3
sidan_111_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
celsius = [10, 15, 20, 25, 30]
|
||||
for c in celsius:
|
||||
print ("%dC = %dF" %(c, (c*1.8)+32))
|
2
sidan_113_ex1.py
Normal file
2
sidan_113_ex1.py
Normal file
@ -0,0 +1,2 @@
|
||||
for c in range(-20, 30, 3):
|
||||
print ("%dC = %dF" %(c, (c*1.8)+32))
|
15
sidan_116_ex1.py
Normal file
15
sidan_116_ex1.py
Normal file
@ -0,0 +1,15 @@
|
||||
konton = {"Kalle": 300, "Joakim": 1800, "Lisa": 900}
|
||||
|
||||
hogst = 0
|
||||
rikast = str()
|
||||
|
||||
for i, j in konton.items():
|
||||
print(i, j)
|
||||
if (hogst == 0):
|
||||
hogst = j
|
||||
rikast = i
|
||||
if (j > hogst):
|
||||
hogst = j
|
||||
rikast = i
|
||||
|
||||
print (rikast, "är rikast!")
|
4
sidan_119_ex1.py
Normal file
4
sidan_119_ex1.py
Normal file
@ -0,0 +1,4 @@
|
||||
counter = 5
|
||||
while counter > 0:
|
||||
print (counter)
|
||||
counter = counter - 1
|
5
sidan_121_ex1.py
Normal file
5
sidan_121_ex1.py
Normal file
@ -0,0 +1,5 @@
|
||||
while True:
|
||||
text = input("Skriv något: ")
|
||||
if (text == "klar"):
|
||||
break
|
||||
print (text)
|
4
sidan_122_ex1.py
Normal file
4
sidan_122_ex1.py
Normal file
@ -0,0 +1,4 @@
|
||||
for i in [1, 2, 3, 4, 5]:
|
||||
if (i == 3):
|
||||
continue
|
||||
print (i)
|
9
sidan_123_ex1.py
Normal file
9
sidan_123_ex1.py
Normal file
@ -0,0 +1,9 @@
|
||||
a = [1, 2, 3, 4]
|
||||
b = [5, 6, 7, 8]
|
||||
|
||||
for i in a:
|
||||
print ("\n" + str(i))
|
||||
for j in b:
|
||||
print (" " + str(j))
|
||||
if j == 6:
|
||||
break
|
12
sidan_124_ex1.py
Normal file
12
sidan_124_ex1.py
Normal file
@ -0,0 +1,12 @@
|
||||
antal = 0
|
||||
summa = 0
|
||||
|
||||
while True:
|
||||
x = input("Ange tal: ")
|
||||
if (x == "klar"):
|
||||
break
|
||||
x = float(x)
|
||||
summa = summa + x
|
||||
antal = antal + 1
|
||||
|
||||
print ("Medelvärdet är %.1f" %(summa/antal))
|
3
sidan_131_ex1.py
Normal file
3
sidan_131_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
fil = open('filtest.txt', 'w')
|
||||
fil.write('Hejsan svejsan\nHur är läget?')
|
||||
fil.close()
|
3
sidan_132_ex1.py
Normal file
3
sidan_132_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
fil = open("filtest.txt")
|
||||
print (fil.read())
|
||||
fil.close()
|
7
sidan_133_ex1.py
Normal file
7
sidan_133_ex1.py
Normal file
@ -0,0 +1,7 @@
|
||||
fil = open("filtest.txt")
|
||||
print (fil.read())
|
||||
print ("\nFilens namn:", fil.name)
|
||||
print ("Filens läge:", fil.mode)
|
||||
print ("Är filen stängd?", fil.closed)
|
||||
fil.close()
|
||||
print ("Är filen stängd?", fil.closed)
|
43
sidan_136_ex1.py
Normal file
43
sidan_136_ex1.py
Normal file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# alice.py, version 1
|
||||
|
||||
# Skapa en ordlista som ska användas för att räkna ord
|
||||
rakna = dict()
|
||||
|
||||
# Öppna filen med open, läs in innehållet till 'innehall'
|
||||
# och byt ut tecknen ,.' mot mellanslag. Gör sen om
|
||||
# allt till små bokstäver
|
||||
fil = open("alice.txt")
|
||||
innehall = fil.read()
|
||||
innehall = innehall.replace(",", " ").replace(".", " ")\
|
||||
.replace("'", " ").lower()
|
||||
|
||||
# Dela upp hela innehållet i enstaka ord i en lista
|
||||
ord = innehall.split()
|
||||
|
||||
# Loopa igenom ord för ord. Om ordet inte redan finns
|
||||
# i 'rakna' läggs det in och sätts till 1. Om det
|
||||
# redan finns, addera med 1.
|
||||
for o in ord:
|
||||
if (o not in rakna):
|
||||
rakna[o] = 1
|
||||
else:
|
||||
rakna[o] = rakna[o] + 1
|
||||
|
||||
# Vänd på nyckel och värde
|
||||
omvand = dict()
|
||||
for k, v in rakna.items():
|
||||
omvand[v] = k
|
||||
|
||||
# Sortera i omvänd ordning
|
||||
sorterad = sorted(omvand.items(), reverse=True)
|
||||
|
||||
# Skriv ut de 10 mest frekventa orden och hur
|
||||
# hur många gånger de förekommer
|
||||
hogsta = 0
|
||||
for i, j in sorterad:
|
||||
print (j, "\t", i)
|
||||
hogsta = hogsta + 1
|
||||
if hogsta == 10:
|
||||
break
|
37
sidan_140_ex1.py
Normal file
37
sidan_140_ex1.py
Normal file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# alice.py, version 2
|
||||
|
||||
# Skapa en ordlista som ska användas för att räkna ord
|
||||
rakna = dict()
|
||||
|
||||
# Öppna filen med open, läs in innehållet till 'innehall'
|
||||
# och byt ut tecknen ,.' mot mellanslag samt gör om allt
|
||||
# till små bokstäver.
|
||||
fil = open("alice.txt")
|
||||
innehall = fil.read().replace(",", " ").replace(".", " ")\
|
||||
.replace("'", " ").lower()
|
||||
|
||||
# Dela upp hela innehållet i enstaka ord i en lista
|
||||
ord = innehall.split()
|
||||
|
||||
# Loopa igenom ord för ord, om ordet inte redan finns lägg
|
||||
# in ordet, sätt standardvärde 0 och addera 1. Om ordet
|
||||
# redan finns, addera bara 1 till ordet.
|
||||
for o in ord:
|
||||
rakna[o] = rakna.get(o, 0) + 1
|
||||
|
||||
# Specialfunktion som gör att nyckeln hämtas från en ny
|
||||
# egen funktion och returneras direkt från ordlistan
|
||||
# (värdet).
|
||||
sorterad = sorted(rakna.items(), key=lambda x: x[1], \
|
||||
reverse=True)
|
||||
|
||||
# Skriv ut de 10 mest förekomna orden tillsammans med
|
||||
# antalet.
|
||||
hogsta = 0
|
||||
for i, j in sorterad:
|
||||
print (i, "\t", j)
|
||||
hogsta += 1
|
||||
if hogsta == 10:
|
||||
break
|
17
sidan_145_ex1.py
Normal file
17
sidan_145_ex1.py
Normal file
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
# Valutaomräkningsprogram, version 1
|
||||
import pickle
|
||||
|
||||
ladda = input("Vill du ladda tidigare kurs? (j/n): ")
|
||||
if (ladda == "j"):
|
||||
kurs = pickle.load(open('kurs.p', 'rb'))
|
||||
elif (ladda == "n"):
|
||||
kurs = float(input("Ange ny USD-kurs: "))
|
||||
pickle.dump(kurs,open('kurs.p', 'wb'))
|
||||
else:
|
||||
print ("Var god svara (j)a eller (n)ej")
|
||||
quit()
|
||||
|
||||
usd = float(input("Ange summa i USD: "))
|
||||
print ("%.2f USD motsvarar %.2f SEK" \
|
||||
%(usd, usd*kurs))
|
22
sidan_149_ex1.py
Normal file
22
sidan_149_ex1.py
Normal file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python3
|
||||
# Valutaomräkningsprogram, version 2
|
||||
import pickle
|
||||
|
||||
ladda = input("Vill du ladda tidigare kurs? (j/n): ")
|
||||
if (ladda == "j"):
|
||||
try:
|
||||
kurs = pickle.load(open('kurs.p', 'rb'))
|
||||
except FileNotFoundError:
|
||||
print ("Det finns ingen tidigare sparad kurs.")
|
||||
kurs = float(input("Ange ny USD-kurs: "))
|
||||
pickle.dump(kurs,open('kurs.p', 'wb'))
|
||||
elif (ladda == "n"):
|
||||
kurs = float(input("Ange ny USD-kurs: "))
|
||||
pickle.dump(kurs,open('kurs.p', 'wb'))
|
||||
else:
|
||||
print ("Var god svara (j)a eller (n)ej")
|
||||
quit()
|
||||
|
||||
usd = float(input("Ange summa i USD: "))
|
||||
print ("%.2f USD motsvarar %.2f SEK" \
|
||||
%(usd, usd*kurs))
|
10
sidan_152_ex1.py
Normal file
10
sidan_152_ex1.py
Normal file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
while True:
|
||||
try:
|
||||
tal = int(input("Skriv ett heltal: "))
|
||||
except:
|
||||
print ("Skriv endast heltal")
|
||||
else:
|
||||
print ("Du skrev", tal)
|
||||
break
|
55
sidan_153_ex1.py
Normal file
55
sidan_153_ex1.py
Normal file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
# Valutaomräkningsprogram, version 3
|
||||
import pickle
|
||||
|
||||
# Fråga användaren om han vill ladda en tidigare kurs
|
||||
ladda = input("Vill du ladda tidigare kurs? (j/n): ")
|
||||
if (ladda == "j"):
|
||||
|
||||
# Påbörja felhanteringen för filöppningen
|
||||
try:
|
||||
kurs = pickle.load(open('kurs.p', 'rb'))
|
||||
# Om filen inte finns, skriv ut ett meddelande
|
||||
# och fråga användaren om en ny kurs (om och om
|
||||
# igen till tills ett tal har lästs in). Spara
|
||||
# sedan den nya kursen.
|
||||
except FileNotFoundError:
|
||||
print ("Det finns ingen tidigare sparad kurs.")
|
||||
while True:
|
||||
try:
|
||||
kurs = float(input("Ange ny USD-kurs: "))
|
||||
except ValueError:
|
||||
print ("Ange endast flyttal eller heltal")
|
||||
else:
|
||||
pickle.dump(kurs,open('kurs.p', 'wb'))
|
||||
break
|
||||
# Om vi inte har rättigheter att läsa filen, avsluta
|
||||
# och skriv ut ett felmeddelande.
|
||||
except PermissionError:
|
||||
print ("Något är fel med rättigheterna för kurs.p")
|
||||
quit()
|
||||
elif (ladda == "n"):
|
||||
# Repetera tills ett flyttal har lästs in.
|
||||
while True:
|
||||
try:
|
||||
kurs = float(input("Ange ny USD-kurs: "))
|
||||
except ValueError:
|
||||
print ("Ange endast flyttal eller heltal")
|
||||
else:
|
||||
pickle.dump(kurs,open('kurs.p', 'wb'))
|
||||
break
|
||||
else:
|
||||
print ("Var god svara (j)a eller (n)ej")
|
||||
quit()
|
||||
|
||||
# Repetera tills ett flytttal har lästs in som SEK
|
||||
while True:
|
||||
try:
|
||||
usd = float(input("Ange summa i USD: "))
|
||||
except ValueError:
|
||||
print ("Ange endast flyttal eller heltal")
|
||||
else:
|
||||
break
|
||||
# Skriv ut svaret
|
||||
print ("%.2f USD motsvarar %.2f SEK" \
|
||||
%(usd, usd*kurs))
|
6
sidan_158_ex1.py
Normal file
6
sidan_158_ex1.py
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def artig(namn):
|
||||
print("Hej",namn + ", hur mår du idag?")
|
||||
|
||||
artig("Kalle")
|
6
sidan_160_ex1.py
Normal file
6
sidan_160_ex1.py
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def hej():
|
||||
print ("Jag kommer bara att säga hej")
|
||||
|
||||
hej()
|
14
sidan_160_ex2.py
Normal file
14
sidan_160_ex2.py
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def ranta(kr, ranta, ar):
|
||||
ranta = (ranta / 100) + 1
|
||||
svar = kr*ranta**ar
|
||||
print (svar)
|
||||
|
||||
pengar = float(input("Ange hur mycket pengar du har \
|
||||
på kontot: "))
|
||||
procentRanta = float(input("Ange ränta i procent: "))
|
||||
antalAr = float(input("Hur många år ska pengarna stå på \
|
||||
kontot? "))
|
||||
|
||||
ranta(pengar, procentRanta, antalAr)
|
14
sidan_162_ex1.py
Normal file
14
sidan_162_ex1.py
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def ranta(kr, ranta, ar):
|
||||
ranta = (ranta / 100) + 1
|
||||
svar = kr*ranta**ar
|
||||
print (svar)
|
||||
|
||||
pengar = float(input("Ange hur mycket pengar du \
|
||||
har på kontot: "))
|
||||
procentRanta = float(input("Ange ränta i procent: "))
|
||||
antalAr = float(input("Hur många år ska pengarna stå \
|
||||
på kontot? "))
|
||||
|
||||
ranta(ar = antalAr, ranta = procentRanta, kr = pengar)
|
26
sidan_163_ex1.py
Normal file
26
sidan_163_ex1.py
Normal file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def ranta(kr, ranta, ar):
|
||||
ranta = (ranta / 100) + 1
|
||||
svar = kr*ranta**ar
|
||||
return (svar)
|
||||
|
||||
pengar = float(input("Ange hur mycket pengar du har \
|
||||
på kontot: "))
|
||||
procentRanta = float(input("Ange ränta i procent: "))
|
||||
antalAr = float(input("Hur många år ska pengarna stå på \
|
||||
kontot? "))
|
||||
|
||||
# Spara till variabel och använd i print
|
||||
tot = ranta(ar = antalAr, ranta = procentRanta, kr = \
|
||||
pengar)
|
||||
print ("Jag har", tot, "kr på kontot efter", antalAr, \
|
||||
"år")
|
||||
|
||||
# Samma funktion, fast med andra värden
|
||||
print ("Med 30000 kr med 3% ränta har du", \
|
||||
ranta(30000, 3, 8), "kr efter 8 år")
|
||||
|
||||
# Använd i en ny beräkning
|
||||
print ("Dubbelt upp blir", (ranta(pengar, procentRanta, \
|
||||
antalAr)*2))
|
10
sidan_165_ex1.py
Normal file
10
sidan_165_ex1.py
Normal file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
var = "Lisa"
|
||||
|
||||
def funk1():
|
||||
var = "Kalle"
|
||||
return var
|
||||
|
||||
print ("Inuti funk1 är 'var':", funk1())
|
||||
print ("Globalt är 'var':", var)
|
12
sidan_166_ex1.py
Normal file
12
sidan_166_ex1.py
Normal file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
var = "Lisa"
|
||||
|
||||
def funk1():
|
||||
var = "Kalle"
|
||||
return var
|
||||
|
||||
var = "Anna"
|
||||
|
||||
print ("Inuti funk1 är 'var':", funk1())
|
||||
print ("Globalt är 'var':", var)
|
14
sidan_166_ex2.py
Normal file
14
sidan_166_ex2.py
Normal file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
y = 8
|
||||
|
||||
def kvadrat(x):
|
||||
print ("Globalt y = ", y)
|
||||
return x**2
|
||||
|
||||
def kub(z):
|
||||
print ("Globalt y = ", y)
|
||||
return z**3
|
||||
|
||||
print (kvadrat(5))
|
||||
print (kub(5))
|
11
sidan_168_ex1.py
Normal file
11
sidan_168_ex1.py
Normal file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
var = "Lisa"
|
||||
|
||||
def funk1():
|
||||
global var
|
||||
var = "Kalle"
|
||||
return var
|
||||
|
||||
print ("Inuti funk1 är 'var':", funk1())
|
||||
print ("Globalt är 'var':", var)
|
8
sidan_169_ex1.py
Normal file
8
sidan_169_ex1.py
Normal file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def ranta(kr, ranta=2, ar=1):
|
||||
ranta = (ranta / 100) + 1
|
||||
svar = kr*ranta**ar
|
||||
return (svar)
|
||||
|
||||
print(ranta(55000))
|
26
sidan_171_ex1.py
Normal file
26
sidan_171_ex1.py
Normal file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# alice.py, version 3
|
||||
|
||||
# Denna funktion ersätter lambda
|
||||
def funk(x):
|
||||
return x[1]
|
||||
|
||||
rakna = dict()
|
||||
fil = open("alice.txt")
|
||||
innehall = fil.read().replace(",", " ").replace(".", " ")\
|
||||
.replace("'", " ").lower()
|
||||
ord = innehall.split()
|
||||
|
||||
for o in ord:
|
||||
rakna[o] = rakna.get(o, 0) + 1
|
||||
|
||||
# key=funk ersätter lambda från förra versionen
|
||||
sorterad = sorted(rakna.items(), key=funk, reverse=True)
|
||||
|
||||
hogsta = 0
|
||||
for i, j in sorterad:
|
||||
print (i, "\t", j)
|
||||
hogsta += 1
|
||||
if hogsta == 10:
|
||||
break
|
9
sidan_172_ex1.py
Normal file
9
sidan_172_ex1.py
Normal file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def fPlus(x):
|
||||
return x + 1
|
||||
|
||||
lPlus = lambda x: x + 1
|
||||
|
||||
print (fPlus(5)) # Den vanliga funktionen
|
||||
print (lPlus(10)) # Lambda-funktionen
|
6
sidan_173_ex1.py
Normal file
6
sidan_173_ex1.py
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
addera = lambda x: x + 3
|
||||
multi = lambda x: addera(x * 3)
|
||||
|
||||
print (multi(5))
|
13
sidan_174_ex1.py
Normal file
13
sidan_174_ex1.py
Normal file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def kvadrat(x):
|
||||
"""Denna funktion 'höjer upp' x med 2,
|
||||
alltså får vi kvadraten på ett tal x."""
|
||||
return x**2
|
||||
|
||||
def kub(x):
|
||||
"""Denna funktion 'höjer upp' x med 3,
|
||||
alltså får vi kuben på ett tal x."""
|
||||
return x**3
|
||||
|
||||
print (help(kub))
|
12
sidan_176_ex1.py
Normal file
12
sidan_176_ex1.py
Normal file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env python3
|
||||
# Filen minmatte.py
|
||||
|
||||
def kvadrat(x):
|
||||
"""Denna funktion 'höjer upp' x med 2,
|
||||
alltså får vi kvadraten på ett tal x."""
|
||||
return x**2
|
||||
|
||||
def kub(x):
|
||||
"""Denna funktion 'höjer upp' x med 3,
|
||||
alltså får vi kubiken på ett tal x."""
|
||||
return x**3
|
6
sidan_176_ex2.py
Normal file
6
sidan_176_ex2.py
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# Filen rakna.py
|
||||
|
||||
import minmatte
|
||||
|
||||
print (minmatte.kub(5))
|
7
sidan_177_ex1.py
Normal file
7
sidan_177_ex1.py
Normal file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# Filen rakna.py
|
||||
|
||||
from minmatte import *
|
||||
|
||||
print (kub(5))
|
||||
print (kvadrat(5))
|
7
sidan_177_ex2.py
Normal file
7
sidan_177_ex2.py
Normal file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# Filen rakna.py
|
||||
|
||||
from minmatte import kub
|
||||
|
||||
print (kub(5))
|
||||
print (kvadrat(5))
|
11
sidan_183_ex1.py
Normal file
11
sidan_183_ex1.py
Normal file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env python3
|
||||
import datetime
|
||||
|
||||
veckodagar = ["måndag", "tisdag", "onsdag",
|
||||
"torsdag", "fredag", "lördag",
|
||||
"söndag"]
|
||||
|
||||
ar = int(input("Ange år med fyra tecken: "))
|
||||
|
||||
print ("Julafton år", str(ar), "är en",
|
||||
veckodagar[datetime.date(ar, 12, 24).weekday()])
|
15
sidan_185_ex1.py
Normal file
15
sidan_185_ex1.py
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import math
|
||||
|
||||
try:
|
||||
t = int(input("Ange täljaren: "))
|
||||
n = int(input("Ange nämnaren: "))
|
||||
except ValueError:
|
||||
exit("Ange endast heltal")
|
||||
|
||||
sgd = math.gcd(t, n)
|
||||
|
||||
print ("SGD är:", str(sgd))
|
||||
print (str(t) + "/" + str(n), "=", \
|
||||
str(int(t/sgd)) + "/" + str(int(n/sgd)))
|
17
sidan_192_ex1.py
Normal file
17
sidan_192_ex1.py
Normal file
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import urllib.request
|
||||
|
||||
# Vi börjar med att skapa ett objekt
|
||||
url = urllib.request.urlopen\
|
||||
("http://jackbenny.se/test.html")
|
||||
|
||||
# Nu läser vi in HTML-dokumentet
|
||||
html = url.read()
|
||||
|
||||
# Därefter måste vi omkoda byte till en sträng för att
|
||||
# t.ex. radbrytningar ska fungera korrekt
|
||||
htmlUtf = html.decode("utf-8")
|
||||
|
||||
# Visa HTML-dokumentet
|
||||
print (htmlUtf)
|
25
sidan_198_ex1.py
Normal file
25
sidan_198_ex1.py
Normal file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
# Filen husdjur.py
|
||||
|
||||
class Husdjur:
|
||||
|
||||
# Skapa grunden och attributen
|
||||
def __init__(self, namn, art,
|
||||
farg, laten, atit=0):
|
||||
self.namn = namn
|
||||
self.art = art
|
||||
self.farg = farg
|
||||
self.laten = laten
|
||||
self.atit = atit
|
||||
|
||||
def gorLjud(self):
|
||||
print (str(self.laten + " ") * 3)
|
||||
|
||||
def mata(self):
|
||||
print (self.namn, "äter sin mat.")
|
||||
self.atit = self.atit + 1
|
||||
print (self.namn, "har ätit", self.atit, "ggr.")
|
||||
|
||||
def __str__(self):
|
||||
return ("%s är en %s %s" %
|
||||
(self.namn, self.farg, self.art))
|
17
sidan_201_ex1.py
Normal file
17
sidan_201_ex1.py
Normal file
@ -0,0 +1,17 @@
|
||||
class Hund(Husdjur):
|
||||
def __init__(self, namn, farg, ras, atit=0):
|
||||
Husdjur.__init__(self, namn=namn, farg=farg,
|
||||
atit=atit, art="hund", laten="Voff")
|
||||
self.ras = ras
|
||||
|
||||
def vilkenRas(self):
|
||||
return (self.namn + " är en " + self.ras)
|
||||
|
||||
class Katt(Husdjur):
|
||||
def __init__(self, namn, farg, ras, atit=0):
|
||||
Husdjur.__init__(self, namn=namn, farg=farg,
|
||||
atit=atit, art="katt", laten="Mjau")
|
||||
self.ras = ras
|
||||
|
||||
def vilkenRas(self):
|
||||
return (self.namn + " är en " + self.ras)
|
16
sidan_206_ex1.py
Normal file
16
sidan_206_ex1.py
Normal file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import urllib.request
|
||||
|
||||
# Vi börjar med att skapa ett objekt
|
||||
url = urllib.request.urlopen\
|
||||
("http://jackbenny.se/logg.txt")
|
||||
|
||||
# Nu läser vi in loggfilen
|
||||
loggfil = url.read()
|
||||
|
||||
# Därefter måste vi omkoda byte till en sträng för att
|
||||
# t.ex. radbrytningar ska fungera korrekt
|
||||
loggfilUtf = loggfil.decode("utf-8")
|
||||
|
||||
print (loggfilUtf)
|
5
sidan_208_ex1.py
Normal file
5
sidan_208_ex1.py
Normal file
@ -0,0 +1,5 @@
|
||||
# Dela upp strängen i enstaka rader istället
|
||||
rader = loggfilUtf.splitlines()
|
||||
|
||||
# Testa att skriva ut tredje raden
|
||||
print (rader[2])
|
3
sidan_209_ex1.py
Normal file
3
sidan_209_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
for rad in rader:
|
||||
if "Invalid user" in rad: # Rader som har Invalid user
|
||||
print (rad) # Skriv ut rader som har 'Invalid user'
|
4
sidan_209_ex2.py
Normal file
4
sidan_209_ex2.py
Normal file
@ -0,0 +1,4 @@
|
||||
for rad in rader:
|
||||
if "Invalid user" not in rad: # INTE har söksträngen
|
||||
continue
|
||||
print (rad) # Skriv ut rader som har 'Invalid user'
|
10
sidan_210_ex1.py
Normal file
10
sidan_210_ex1.py
Normal file
@ -0,0 +1,10 @@
|
||||
raknare = 0 # Räknare till antalet försök
|
||||
ipLista = list() # I denna sparar vi IP-adresser
|
||||
for rad in rader:
|
||||
if "Invalid user" not in rad: # INTE har söksträngen
|
||||
continue # hoppas över.
|
||||
raknare = raknare + 1 # Addera 1 till antalet försök
|
||||
ord = rad.split() # Dela upp raden i enskilda ord
|
||||
ip = ord[9] # Fält 9 är IP-adressen
|
||||
if ip not in ipLista: # Om inte adressen redan finns,
|
||||
ipLista.append(ip) # så lägg till den
|
34
sidan_210_ex2.py
Normal file
34
sidan_210_ex2.py
Normal file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import urllib.request
|
||||
|
||||
# Vi börjar med att skapa ett objekt
|
||||
url = urllib.request.urlopen\
|
||||
("http://jackbenny.se/logg.txt")
|
||||
|
||||
# Nu läser vi in loggfilen
|
||||
loggfil = url.read()
|
||||
|
||||
# Därefter måste vi omkoda byte till en sträng för att
|
||||
# t.ex. radbrytningar ska fungera korrekt
|
||||
loggfilUtf = loggfil.decode("utf-8")
|
||||
|
||||
# Dela upp strängen i enstaka rader istället
|
||||
rader = loggfilUtf.splitlines()
|
||||
|
||||
raknare = 0 # Räknare till antalet försök
|
||||
ipLista = list() # I denna sparar vi IP-adresser
|
||||
for rad in rader:
|
||||
if "Invalid user" not in rad: # INTE har söksträngen
|
||||
continue # hoppas över.
|
||||
raknare = raknare + 1 # Addera 1 till antalet försök
|
||||
ord = rad.split() # Dela upp raden i enskilda ord
|
||||
ip = ord[9] # Fält 9 är IP-adressen
|
||||
if ip not in ipLista: # Om inte adressen redan finns,
|
||||
ipLista.append(ip) # så lägg till den
|
||||
|
||||
# Skriv ut resultatet på skärmen
|
||||
print ("\nTotalt antal försök:", raknare)
|
||||
print ("\nLista över IP-adresser")
|
||||
for adress in ipLista:
|
||||
print (adress)
|
7
sidan_212_ex1.py
Normal file
7
sidan_212_ex1.py
Normal file
@ -0,0 +1,7 @@
|
||||
# Be användaren om en adress
|
||||
adress = input("Ange adress till loggfilen: ")
|
||||
|
||||
# Om adressen är kortare än ett tecken angav
|
||||
# användaren ingen adress, så vi kör på default
|
||||
if (len(adress) < 1):
|
||||
adress = "http://jackbenny.se/logg.txt"
|
12
sidan_213_ex1.py
Normal file
12
sidan_213_ex1.py
Normal file
@ -0,0 +1,12 @@
|
||||
# Try-block för att testa om adressen finns och är
|
||||
# giltig.
|
||||
try:
|
||||
# Vi börjar med att skapa ett objekt
|
||||
url = urllib.request.urlopen\
|
||||
(adress)
|
||||
except ValueError:
|
||||
quit("Ogiltigt adressformat")
|
||||
except urllib.error.URLError:
|
||||
quit("Fel eller okänd adress")
|
||||
except urllib.error.HTTPError:
|
||||
quit("Fel adress, det finns inget där")
|
3
sidan_214_ex1.py
Normal file
3
sidan_214_ex1.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Testa ifall det är loggfil, och om inte, avsluta.
|
||||
if "]:" not in loggfilUtf:
|
||||
quit("Det där verkar inte vara en loggfil")
|
55
sidan_214_ex2.py
Normal file
55
sidan_214_ex2.py
Normal file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import urllib.request
|
||||
|
||||
# Be användaren om en adress
|
||||
adress = input("Ange adress till loggfilen: ")
|
||||
|
||||
# Om adressen är kortare än ett tecken angav
|
||||
# användaren ingen adress, så vi kör på default
|
||||
if (len(adress) < 1):
|
||||
adress = "http://jackbenny.se/logg.txt"
|
||||
|
||||
# Try-block för att testa om adressen finns och är
|
||||
# giltig.
|
||||
try:
|
||||
# Vi börjar med att skapa ett objekt
|
||||
url = urllib.request.urlopen\
|
||||
(adress)
|
||||
except ValueError:
|
||||
quit("Ogiltigt adressformat")
|
||||
except urllib.error.URLError:
|
||||
quit("Fel eller okänd adress")
|
||||
except urllib.error.HTTPError:
|
||||
quit("Fel adress, det finns inget där")
|
||||
|
||||
# Nu läser vi in loggfilen
|
||||
loggfil = url.read()
|
||||
|
||||
# Därefter måste vi omkoda byte till en sträng för att
|
||||
# t.ex. radbrytningar ska fungera korrekt
|
||||
loggfilUtf = loggfil.decode("utf-8")
|
||||
|
||||
# Testa ifall det är loggfil och om inte, avsluta.
|
||||
if "]:" not in loggfilUtf:
|
||||
quit("Det där verkar inte vara en loggfil")
|
||||
|
||||
# Dela upp strängen i enstaka rader istället
|
||||
rader = loggfilUtf.splitlines()
|
||||
|
||||
raknare = 0 # Räknare till antalet försök
|
||||
ipLista = list() # I denna sparar vi IP-adresser
|
||||
for rad in rader:
|
||||
if "Invalid user" not in rad: # INTE har söksträngen
|
||||
continue # hoppas över.
|
||||
raknare = raknare + 1 # Addera 1 till antalet försök
|
||||
ord = rad.split() # Dela upp raden i enskilda ord
|
||||
ip = ord[9] # Fält 9 är IP-adressen
|
||||
if ip not in ipLista: # Om inte adressen redan finns,
|
||||
ipLista.append(ip) # så lägg till den
|
||||
|
||||
# Skriv ut resultatet på skärmen
|
||||
print ("\nTotalt antal försök:", raknare)
|
||||
print ("\nLista över IP-adresser")
|
||||
for adress in ipLista:
|
||||
print (adress)
|
5
sidan_99_ex1.py
Normal file
5
sidan_99_ex1.py
Normal file
@ -0,0 +1,5 @@
|
||||
x = 50
|
||||
if (x > 20):
|
||||
print (str(x) + " är större än 20")
|
||||
if (x > 10):
|
||||
print (str(x) + " är större än 10")
|
8
sidan_99_ex2.py
Normal file
8
sidan_99_ex2.py
Normal file
@ -0,0 +1,8 @@
|
||||
namn = "Karin"
|
||||
if (namn == "Karin"):
|
||||
print ("Hej Karin, välkommen till systemet")
|
||||
inloggad = 1
|
||||
x = 9**2
|
||||
print (x)
|
||||
print ("Nu är vi utanför if och denna meningen skrivs \
|
||||
alltid")
|
Loading…
x
Reference in New Issue
Block a user