From aecb16fe01100bb4b5b4c8fd47558f8360cdbe97 Mon Sep 17 00:00:00 2001 From: Jack-Benny Persson Date: Sat, 8 Jan 2022 20:48:32 +0100 Subject: [PATCH] Initial commit --- README.md | 44 +++++++++++++++++++++++++++++ gip_omslagsbild_2a_utg.png | Bin 0 -> 68089 bytes sidan_101_ex1.py | 3 ++ sidan_103_ex1.py | 11 ++++++++ sidan_104_ex1.py | 3 ++ sidan_104_ex2.py | 7 +++++ sidan_105_ex1.py | 6 ++++ sidan_107_ex1.py | 6 ++++ sidan_110_ex1.py | 3 ++ sidan_111_ex1.py | 3 ++ sidan_113_ex1.py | 2 ++ sidan_116_ex1.py | 15 ++++++++++ sidan_119_ex1.py | 4 +++ sidan_121_ex1.py | 5 ++++ sidan_122_ex1.py | 4 +++ sidan_123_ex1.py | 9 ++++++ sidan_124_ex1.py | 12 ++++++++ sidan_131_ex1.py | 3 ++ sidan_132_ex1.py | 3 ++ sidan_133_ex1.py | 7 +++++ sidan_136_ex1.py | 43 +++++++++++++++++++++++++++++ sidan_140_ex1.py | 37 +++++++++++++++++++++++++ sidan_145_ex1.py | 17 ++++++++++++ sidan_149_ex1.py | 22 +++++++++++++++ sidan_152_ex1.py | 10 +++++++ sidan_153_ex1.py | 55 +++++++++++++++++++++++++++++++++++++ sidan_158_ex1.py | 6 ++++ sidan_160_ex1.py | 6 ++++ sidan_160_ex2.py | 14 ++++++++++ sidan_162_ex1.py | 14 ++++++++++ sidan_163_ex1.py | 26 ++++++++++++++++++ sidan_165_ex1.py | 10 +++++++ sidan_166_ex1.py | 12 ++++++++ sidan_166_ex2.py | 14 ++++++++++ sidan_168_ex1.py | 11 ++++++++ sidan_169_ex1.py | 8 ++++++ sidan_171_ex1.py | 26 ++++++++++++++++++ sidan_172_ex1.py | 9 ++++++ sidan_173_ex1.py | 6 ++++ sidan_174_ex1.py | 13 +++++++++ sidan_176_ex1.py | 12 ++++++++ sidan_176_ex2.py | 6 ++++ sidan_177_ex1.py | 7 +++++ sidan_177_ex2.py | 7 +++++ sidan_183_ex1.py | 11 ++++++++ sidan_185_ex1.py | 15 ++++++++++ sidan_192_ex1.py | 17 ++++++++++++ sidan_198_ex1.py | 25 +++++++++++++++++ sidan_201_ex1.py | 17 ++++++++++++ sidan_206_ex1.py | 16 +++++++++++ sidan_208_ex1.py | 5 ++++ sidan_209_ex1.py | 3 ++ sidan_209_ex2.py | 4 +++ sidan_210_ex1.py | 10 +++++++ sidan_210_ex2.py | 34 +++++++++++++++++++++++ sidan_212_ex1.py | 7 +++++ sidan_213_ex1.py | 12 ++++++++ sidan_214_ex1.py | 3 ++ sidan_214_ex2.py | 55 +++++++++++++++++++++++++++++++++++++ sidan_99_ex1.py | 5 ++++ sidan_99_ex2.py | 8 ++++++ 61 files changed, 788 insertions(+) create mode 100644 README.md create mode 100644 gip_omslagsbild_2a_utg.png create mode 100644 sidan_101_ex1.py create mode 100644 sidan_103_ex1.py create mode 100644 sidan_104_ex1.py create mode 100644 sidan_104_ex2.py create mode 100644 sidan_105_ex1.py create mode 100644 sidan_107_ex1.py create mode 100644 sidan_110_ex1.py create mode 100644 sidan_111_ex1.py create mode 100644 sidan_113_ex1.py create mode 100644 sidan_116_ex1.py create mode 100644 sidan_119_ex1.py create mode 100644 sidan_121_ex1.py create mode 100644 sidan_122_ex1.py create mode 100644 sidan_123_ex1.py create mode 100644 sidan_124_ex1.py create mode 100644 sidan_131_ex1.py create mode 100644 sidan_132_ex1.py create mode 100644 sidan_133_ex1.py create mode 100644 sidan_136_ex1.py create mode 100644 sidan_140_ex1.py create mode 100644 sidan_145_ex1.py create mode 100644 sidan_149_ex1.py create mode 100644 sidan_152_ex1.py create mode 100644 sidan_153_ex1.py create mode 100644 sidan_158_ex1.py create mode 100644 sidan_160_ex1.py create mode 100644 sidan_160_ex2.py create mode 100644 sidan_162_ex1.py create mode 100644 sidan_163_ex1.py create mode 100644 sidan_165_ex1.py create mode 100644 sidan_166_ex1.py create mode 100644 sidan_166_ex2.py create mode 100644 sidan_168_ex1.py create mode 100644 sidan_169_ex1.py create mode 100644 sidan_171_ex1.py create mode 100644 sidan_172_ex1.py create mode 100644 sidan_173_ex1.py create mode 100644 sidan_174_ex1.py create mode 100644 sidan_176_ex1.py create mode 100644 sidan_176_ex2.py create mode 100644 sidan_177_ex1.py create mode 100644 sidan_177_ex2.py create mode 100644 sidan_183_ex1.py create mode 100644 sidan_185_ex1.py create mode 100644 sidan_192_ex1.py create mode 100644 sidan_198_ex1.py create mode 100644 sidan_201_ex1.py create mode 100644 sidan_206_ex1.py create mode 100644 sidan_208_ex1.py create mode 100644 sidan_209_ex1.py create mode 100644 sidan_209_ex2.py create mode 100644 sidan_210_ex1.py create mode 100644 sidan_210_ex2.py create mode 100644 sidan_212_ex1.py create mode 100644 sidan_213_ex1.py create mode 100644 sidan_214_ex1.py create mode 100644 sidan_214_ex2.py create mode 100644 sidan_99_ex1.py create mode 100644 sidan_99_ex2.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..7861293 --- /dev/null +++ b/README.md @@ -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 +![Grunderna i programmering](gip_omslagsbild_2a_utg.png) diff --git a/gip_omslagsbild_2a_utg.png b/gip_omslagsbild_2a_utg.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1e70637802386ed935dd151800d930b055d763 GIT binary patch literal 68089 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 z

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%0DJFRdeAi`^_79`)!A}GC(!}hn>S2AI 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𝔔qq8vzE%@sNsxft;U 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%0AUN0vP+FAQXGIgnK*4xB$|6kQ*W8y38^@)(tI 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 15): + print ("Sant, eftersom 10 INTE är större än 15") diff --git a/sidan_103_ex1.py b/sidan_103_ex1.py new file mode 100644 index 0000000..dcaab22 --- /dev/null +++ b/sidan_103_ex1.py @@ -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") diff --git a/sidan_104_ex1.py b/sidan_104_ex1.py new file mode 100644 index 0000000..8731e0a --- /dev/null +++ b/sidan_104_ex1.py @@ -0,0 +1,3 @@ +namn = input("Ange namn: ") +print ("Hej " + namn) +print (type(namn)) diff --git a/sidan_104_ex2.py b/sidan_104_ex2.py new file mode 100644 index 0000000..23e9330 --- /dev/null +++ b/sidan_104_ex2.py @@ -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)) diff --git a/sidan_105_ex1.py b/sidan_105_ex1.py new file mode 100644 index 0000000..be6f007 --- /dev/null +++ b/sidan_105_ex1.py @@ -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)) diff --git a/sidan_107_ex1.py b/sidan_107_ex1.py new file mode 100644 index 0000000..cedce76 --- /dev/null +++ b/sidan_107_ex1.py @@ -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)) diff --git a/sidan_110_ex1.py b/sidan_110_ex1.py new file mode 100644 index 0000000..fbe0688 --- /dev/null +++ b/sidan_110_ex1.py @@ -0,0 +1,3 @@ +lista = ["Kalle", "Lisa", "Linda"] +for namn in lista: + print ("Hej %s, hur är läget?" %namn) diff --git a/sidan_111_ex1.py b/sidan_111_ex1.py new file mode 100644 index 0000000..02c5a8a --- /dev/null +++ b/sidan_111_ex1.py @@ -0,0 +1,3 @@ +celsius = [10, 15, 20, 25, 30] +for c in celsius: + print ("%dC = %dF" %(c, (c*1.8)+32)) diff --git a/sidan_113_ex1.py b/sidan_113_ex1.py new file mode 100644 index 0000000..a77bdb7 --- /dev/null +++ b/sidan_113_ex1.py @@ -0,0 +1,2 @@ +for c in range(-20, 30, 3): + print ("%dC = %dF" %(c, (c*1.8)+32)) diff --git a/sidan_116_ex1.py b/sidan_116_ex1.py new file mode 100644 index 0000000..6e8bdec --- /dev/null +++ b/sidan_116_ex1.py @@ -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!") diff --git a/sidan_119_ex1.py b/sidan_119_ex1.py new file mode 100644 index 0000000..3aeb80d --- /dev/null +++ b/sidan_119_ex1.py @@ -0,0 +1,4 @@ +counter = 5 +while counter > 0: + print (counter) + counter = counter - 1 diff --git a/sidan_121_ex1.py b/sidan_121_ex1.py new file mode 100644 index 0000000..ff317d5 --- /dev/null +++ b/sidan_121_ex1.py @@ -0,0 +1,5 @@ +while True: + text = input("Skriv något: ") + if (text == "klar"): + break + print (text) diff --git a/sidan_122_ex1.py b/sidan_122_ex1.py new file mode 100644 index 0000000..dfeb9cb --- /dev/null +++ b/sidan_122_ex1.py @@ -0,0 +1,4 @@ +for i in [1, 2, 3, 4, 5]: + if (i == 3): + continue + print (i) diff --git a/sidan_123_ex1.py b/sidan_123_ex1.py new file mode 100644 index 0000000..2c6080c --- /dev/null +++ b/sidan_123_ex1.py @@ -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 diff --git a/sidan_124_ex1.py b/sidan_124_ex1.py new file mode 100644 index 0000000..e5536d0 --- /dev/null +++ b/sidan_124_ex1.py @@ -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)) diff --git a/sidan_131_ex1.py b/sidan_131_ex1.py new file mode 100644 index 0000000..7cb97ff --- /dev/null +++ b/sidan_131_ex1.py @@ -0,0 +1,3 @@ +fil = open('filtest.txt', 'w') +fil.write('Hejsan svejsan\nHur är läget?') +fil.close() diff --git a/sidan_132_ex1.py b/sidan_132_ex1.py new file mode 100644 index 0000000..4f0a5bb --- /dev/null +++ b/sidan_132_ex1.py @@ -0,0 +1,3 @@ +fil = open("filtest.txt") +print (fil.read()) +fil.close() diff --git a/sidan_133_ex1.py b/sidan_133_ex1.py new file mode 100644 index 0000000..5690e46 --- /dev/null +++ b/sidan_133_ex1.py @@ -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) diff --git a/sidan_136_ex1.py b/sidan_136_ex1.py new file mode 100644 index 0000000..3138fe3 --- /dev/null +++ b/sidan_136_ex1.py @@ -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 diff --git a/sidan_140_ex1.py b/sidan_140_ex1.py new file mode 100644 index 0000000..dc0132b --- /dev/null +++ b/sidan_140_ex1.py @@ -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 diff --git a/sidan_145_ex1.py b/sidan_145_ex1.py new file mode 100644 index 0000000..8df5b0d --- /dev/null +++ b/sidan_145_ex1.py @@ -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)) diff --git a/sidan_149_ex1.py b/sidan_149_ex1.py new file mode 100644 index 0000000..ff9cafb --- /dev/null +++ b/sidan_149_ex1.py @@ -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)) diff --git a/sidan_152_ex1.py b/sidan_152_ex1.py new file mode 100644 index 0000000..d01b1c2 --- /dev/null +++ b/sidan_152_ex1.py @@ -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 diff --git a/sidan_153_ex1.py b/sidan_153_ex1.py new file mode 100644 index 0000000..ca5f7d1 --- /dev/null +++ b/sidan_153_ex1.py @@ -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)) diff --git a/sidan_158_ex1.py b/sidan_158_ex1.py new file mode 100644 index 0000000..2b18447 --- /dev/null +++ b/sidan_158_ex1.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +def artig(namn): + print("Hej",namn + ", hur mår du idag?") + +artig("Kalle") diff --git a/sidan_160_ex1.py b/sidan_160_ex1.py new file mode 100644 index 0000000..12b633c --- /dev/null +++ b/sidan_160_ex1.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +def hej(): + print ("Jag kommer bara att säga hej") + +hej() diff --git a/sidan_160_ex2.py b/sidan_160_ex2.py new file mode 100644 index 0000000..2bb9af4 --- /dev/null +++ b/sidan_160_ex2.py @@ -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) diff --git a/sidan_162_ex1.py b/sidan_162_ex1.py new file mode 100644 index 0000000..cdd379e --- /dev/null +++ b/sidan_162_ex1.py @@ -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) diff --git a/sidan_163_ex1.py b/sidan_163_ex1.py new file mode 100644 index 0000000..345e214 --- /dev/null +++ b/sidan_163_ex1.py @@ -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)) diff --git a/sidan_165_ex1.py b/sidan_165_ex1.py new file mode 100644 index 0000000..a249240 --- /dev/null +++ b/sidan_165_ex1.py @@ -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) diff --git a/sidan_166_ex1.py b/sidan_166_ex1.py new file mode 100644 index 0000000..ec6ae79 --- /dev/null +++ b/sidan_166_ex1.py @@ -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) diff --git a/sidan_166_ex2.py b/sidan_166_ex2.py new file mode 100644 index 0000000..7febe1e --- /dev/null +++ b/sidan_166_ex2.py @@ -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)) diff --git a/sidan_168_ex1.py b/sidan_168_ex1.py new file mode 100644 index 0000000..de29514 --- /dev/null +++ b/sidan_168_ex1.py @@ -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) diff --git a/sidan_169_ex1.py b/sidan_169_ex1.py new file mode 100644 index 0000000..a9b2e15 --- /dev/null +++ b/sidan_169_ex1.py @@ -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)) diff --git a/sidan_171_ex1.py b/sidan_171_ex1.py new file mode 100644 index 0000000..255425b --- /dev/null +++ b/sidan_171_ex1.py @@ -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 diff --git a/sidan_172_ex1.py b/sidan_172_ex1.py new file mode 100644 index 0000000..cef15b0 --- /dev/null +++ b/sidan_172_ex1.py @@ -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 diff --git a/sidan_173_ex1.py b/sidan_173_ex1.py new file mode 100644 index 0000000..c877e84 --- /dev/null +++ b/sidan_173_ex1.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +addera = lambda x: x + 3 +multi = lambda x: addera(x * 3) + +print (multi(5)) diff --git a/sidan_174_ex1.py b/sidan_174_ex1.py new file mode 100644 index 0000000..c0c0e8e --- /dev/null +++ b/sidan_174_ex1.py @@ -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)) diff --git a/sidan_176_ex1.py b/sidan_176_ex1.py new file mode 100644 index 0000000..e1018ba --- /dev/null +++ b/sidan_176_ex1.py @@ -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 diff --git a/sidan_176_ex2.py b/sidan_176_ex2.py new file mode 100644 index 0000000..3a90bf7 --- /dev/null +++ b/sidan_176_ex2.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +# Filen rakna.py + +import minmatte + +print (minmatte.kub(5)) diff --git a/sidan_177_ex1.py b/sidan_177_ex1.py new file mode 100644 index 0000000..47fed2e --- /dev/null +++ b/sidan_177_ex1.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +# Filen rakna.py + +from minmatte import * + +print (kub(5)) +print (kvadrat(5)) diff --git a/sidan_177_ex2.py b/sidan_177_ex2.py new file mode 100644 index 0000000..6b48861 --- /dev/null +++ b/sidan_177_ex2.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +# Filen rakna.py + +from minmatte import kub + +print (kub(5)) +print (kvadrat(5)) diff --git a/sidan_183_ex1.py b/sidan_183_ex1.py new file mode 100644 index 0000000..04e1f33 --- /dev/null +++ b/sidan_183_ex1.py @@ -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()]) diff --git a/sidan_185_ex1.py b/sidan_185_ex1.py new file mode 100644 index 0000000..c53d6db --- /dev/null +++ b/sidan_185_ex1.py @@ -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))) diff --git a/sidan_192_ex1.py b/sidan_192_ex1.py new file mode 100644 index 0000000..063215f --- /dev/null +++ b/sidan_192_ex1.py @@ -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) diff --git a/sidan_198_ex1.py b/sidan_198_ex1.py new file mode 100644 index 0000000..370bad0 --- /dev/null +++ b/sidan_198_ex1.py @@ -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)) diff --git a/sidan_201_ex1.py b/sidan_201_ex1.py new file mode 100644 index 0000000..7c3d681 --- /dev/null +++ b/sidan_201_ex1.py @@ -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) diff --git a/sidan_206_ex1.py b/sidan_206_ex1.py new file mode 100644 index 0000000..0946c2a --- /dev/null +++ b/sidan_206_ex1.py @@ -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) diff --git a/sidan_208_ex1.py b/sidan_208_ex1.py new file mode 100644 index 0000000..da6c076 --- /dev/null +++ b/sidan_208_ex1.py @@ -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]) diff --git a/sidan_209_ex1.py b/sidan_209_ex1.py new file mode 100644 index 0000000..5cd5e55 --- /dev/null +++ b/sidan_209_ex1.py @@ -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' diff --git a/sidan_209_ex2.py b/sidan_209_ex2.py new file mode 100644 index 0000000..634ccf0 --- /dev/null +++ b/sidan_209_ex2.py @@ -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' diff --git a/sidan_210_ex1.py b/sidan_210_ex1.py new file mode 100644 index 0000000..1d963a2 --- /dev/null +++ b/sidan_210_ex1.py @@ -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 diff --git a/sidan_210_ex2.py b/sidan_210_ex2.py new file mode 100644 index 0000000..63340ad --- /dev/null +++ b/sidan_210_ex2.py @@ -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) diff --git a/sidan_212_ex1.py b/sidan_212_ex1.py new file mode 100644 index 0000000..f3066d2 --- /dev/null +++ b/sidan_212_ex1.py @@ -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" diff --git a/sidan_213_ex1.py b/sidan_213_ex1.py new file mode 100644 index 0000000..da019f5 --- /dev/null +++ b/sidan_213_ex1.py @@ -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") diff --git a/sidan_214_ex1.py b/sidan_214_ex1.py new file mode 100644 index 0000000..4a13b2b --- /dev/null +++ b/sidan_214_ex1.py @@ -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") diff --git a/sidan_214_ex2.py b/sidan_214_ex2.py new file mode 100644 index 0000000..62c5638 --- /dev/null +++ b/sidan_214_ex2.py @@ -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) diff --git a/sidan_99_ex1.py b/sidan_99_ex1.py new file mode 100644 index 0000000..0fa5b84 --- /dev/null +++ b/sidan_99_ex1.py @@ -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") diff --git a/sidan_99_ex2.py b/sidan_99_ex2.py new file mode 100644 index 0000000..4285e09 --- /dev/null +++ b/sidan_99_ex2.py @@ -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")