Lagt till kapitel 8

This commit is contained in:
2024-02-03 18:44:13 +01:00
parent dcd905737e
commit 0983e93cbe
15 changed files with 292 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.txt
*.p

41
kapitel8/alice-ver1.py Normal file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env python3
# 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

36
kapitel8/alice-ver2.py Normal file
View File

@@ -0,0 +1,36 @@
#!/usr/bin/env python3
# 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örekommande orden tillsammans med
# antalet.
hogsta = 0
for i, j in sorterad:
print(i, "\t", j)
hogsta += 1
if hogsta == 10:
break

4
kapitel8/filer-ex1.py Normal file
View File

@@ -0,0 +1,4 @@
fil = open('filtest.txt', 'w')
fil.write('Hejsan svejsan\nHur är läget?\n')
fil.close()

4
kapitel8/filer-ex2.py Normal file
View File

@@ -0,0 +1,4 @@
fil = open("filtest.txt")
print(fil.read())
fil.close()

8
kapitel8/filer-ex3.py Normal file
View File

@@ -0,0 +1,8 @@
fil = open("filtest.txt")
print(fil.read())
print("Filens 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)

13
kapitel8/finally-ex1.py Normal file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/env python3
import sys
try:
print(b)
except NameError:
print("'b' finns inte")
sys.exit("Nu avslutar vi...")
else:
print("'b' finns visst det")
finally:
print("Jag exekveras alltid, oavsett vad")

14
kapitel8/finally-ex2.py Normal file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env python3
import sys
b = "Hejsan"
try:
print(b)
except NameError:
print("'b' finns inte")
sys.exit("Nu avslutar vi...")
else:
print("'b' finns visst det")
finally:
print("Jag exekveras alltid, oavsett vad")

View File

@@ -0,0 +1,3 @@
import sys
sys.exit("Något gick fel")

View File

@@ -0,0 +1,3 @@
import sys
sys.exit()

View File

@@ -0,0 +1,17 @@
#!/usr/bin/env python3
import pickle
import sys
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:
sys.exit("Var god svara (j)a eller (n)ej")
usd = float(input("Ange summa i USD: "))
print("%.2f USD motsvarar %.2f SEK" \
%(usd, usd*kurs))

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env python3
import pickle
import sys
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:
sys.exit("Var god svara (j)a eller (n)ej")
usd = float(input("Ange summa i USD: "))
print("%.2f USD motsvarar %.2f SEK" \
%(usd, usd*kurs))

View File

@@ -0,0 +1,53 @@
#!/usr/bin/env python3
import pickle
import sys
# 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:
sys.exit("Något är fel med rättigheterna för kurs.p")
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:
sys.exit("Var god svara (j)a eller (n)ej")
# 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))

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
import pickle
import sys
import datetime
# 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:
sys.exit("Något är fel med rättigheterna för kurs.p")
# Logga alla läsförsök
finally:
logg = open('loggfil.txt', 'a')
logg.write("Läsförsök gjordes: " +
str(datetime.datetime.now()) + "\n")
logg.close()
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:
sys.exit("Var god svara (j)a eller (n)ej")
# 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))

View File

@@ -0,0 +1,11 @@
#!/usr/bin/env python3
while True:
try:
tal = int(input("Skriv ett heltal: "))
except:
print("Skriv endast heltal")
else:
print("Du skrev", tal)
break