diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f99c6f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.txt +*.p diff --git a/kapitel8/alice-ver1.py b/kapitel8/alice-ver1.py new file mode 100644 index 0000000..58b919d --- /dev/null +++ b/kapitel8/alice-ver1.py @@ -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 diff --git a/kapitel8/alice-ver2.py b/kapitel8/alice-ver2.py new file mode 100644 index 0000000..af2d2c4 --- /dev/null +++ b/kapitel8/alice-ver2.py @@ -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 + diff --git a/kapitel8/filer-ex1.py b/kapitel8/filer-ex1.py new file mode 100644 index 0000000..b63affe --- /dev/null +++ b/kapitel8/filer-ex1.py @@ -0,0 +1,4 @@ +fil = open('filtest.txt', 'w') +fil.write('Hejsan svejsan\nHur är läget?\n') +fil.close() + diff --git a/kapitel8/filer-ex2.py b/kapitel8/filer-ex2.py new file mode 100644 index 0000000..d9458f7 --- /dev/null +++ b/kapitel8/filer-ex2.py @@ -0,0 +1,4 @@ +fil = open("filtest.txt") +print(fil.read()) +fil.close() + diff --git a/kapitel8/filer-ex3.py b/kapitel8/filer-ex3.py new file mode 100644 index 0000000..e1be8a2 --- /dev/null +++ b/kapitel8/filer-ex3.py @@ -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) + diff --git a/kapitel8/finally-ex1.py b/kapitel8/finally-ex1.py new file mode 100644 index 0000000..8271169 --- /dev/null +++ b/kapitel8/finally-ex1.py @@ -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") + diff --git a/kapitel8/finally-ex2.py b/kapitel8/finally-ex2.py new file mode 100644 index 0000000..c6a9d56 --- /dev/null +++ b/kapitel8/finally-ex2.py @@ -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") + diff --git a/kapitel8/sys-exit-test1.py b/kapitel8/sys-exit-test1.py new file mode 100644 index 0000000..633fe8d --- /dev/null +++ b/kapitel8/sys-exit-test1.py @@ -0,0 +1,3 @@ +import sys +sys.exit("Något gick fel") + diff --git a/kapitel8/sys-exit-test2.py b/kapitel8/sys-exit-test2.py new file mode 100644 index 0000000..926be6b --- /dev/null +++ b/kapitel8/sys-exit-test2.py @@ -0,0 +1,3 @@ +import sys +sys.exit() + diff --git a/kapitel8/valutaomrakning-ver1.py b/kapitel8/valutaomrakning-ver1.py new file mode 100644 index 0000000..868068e --- /dev/null +++ b/kapitel8/valutaomrakning-ver1.py @@ -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)) + diff --git a/kapitel8/valutaomrakning-ver2.py b/kapitel8/valutaomrakning-ver2.py new file mode 100644 index 0000000..80b115f --- /dev/null +++ b/kapitel8/valutaomrakning-ver2.py @@ -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)) + diff --git a/kapitel8/valutaomrakning-ver3.py b/kapitel8/valutaomrakning-ver3.py new file mode 100644 index 0000000..562c657 --- /dev/null +++ b/kapitel8/valutaomrakning-ver3.py @@ -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)) + diff --git a/kapitel8/valutaomrakning-ver4.py b/kapitel8/valutaomrakning-ver4.py new file mode 100644 index 0000000..b2a4b84 --- /dev/null +++ b/kapitel8/valutaomrakning-ver4.py @@ -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)) + diff --git a/kapitel8/while-true-ex2.py b/kapitel8/while-true-ex2.py new file mode 100644 index 0000000..506f769 --- /dev/null +++ b/kapitel8/while-true-ex2.py @@ -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 +