diff --git a/kapitel10/antalet-dagar.py b/kapitel10/antalet-dagar.py new file mode 100644 index 0000000..e3ec505 --- /dev/null +++ b/kapitel10/antalet-dagar.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +import datetime + +startdatum = input("Ange startdatumet (YYYY-MM-DD): ") +slutdatum = input("Ange slutdatumet (YYYY-MM-DD): ") + +datum1 = datetime.datetime.strptime(startdatum, "%Y-%m-%d") +datum2 = datetime.datetime.strptime(slutdatum, "%Y-%m-%d") +skillnad = datum2 - datum1 + +print("Antalet dagar mellan de angivna datumen är", + skillnad.days) + diff --git a/kapitel10/forenkla-brak.py b/kapitel10/forenkla-brak.py new file mode 100644 index 0000000..b392f84 --- /dev/null +++ b/kapitel10/forenkla-brak.py @@ -0,0 +1,16 @@ +#!/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/kapitel10/hamta-data.py b/kapitel10/hamta-data.py new file mode 100644 index 0000000..ade0b6f --- /dev/null +++ b/kapitel10/hamta-data.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/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/kapitel10/julafton.py b/kapitel10/julafton.py new file mode 100644 index 0000000..7dfd96c --- /dev/null +++ b/kapitel10/julafton.py @@ -0,0 +1,12 @@ +#!/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/kapitel10/signalhantering.py b/kapitel10/signalhantering.py new file mode 100644 index 0000000..be9cdb3 --- /dev/null +++ b/kapitel10/signalhantering.py @@ -0,0 +1,12 @@ +import signal +import sys + +def sigint_hanterare(signal, frame): + sys.exit("\nDu tryckte på Ctrl-C, hej då...") + +signal.signal(signal.SIGINT, sigint_hanterare) + +while True: + svar = input("Skriv något: ") + print("Du skrev:", str(svar)) + diff --git a/kapitel11/husdjur.py b/kapitel11/husdjur.py new file mode 100644 index 0000000..18b26a9 --- /dev/null +++ b/kapitel11/husdjur.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +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, "gång(er).") + + def __str__(self): + return ("%s är en %s %s" % + (self.namn, self.farg, self.art)) + +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/kapitel12/hitta-intrangsforsok.py b/kapitel12/hitta-intrangsforsok.py new file mode 100644 index 0000000..97f900e --- /dev/null +++ b/kapitel12/hitta-intrangsforsok.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import urllib.request +import sys + +# 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: + sys.exit("Ogiltigt adressformat") +except urllib.error.URLError: + sys.exit("Fel eller okänd adress") +except urllib.error.HTTPError: + sys.exit("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: + sys.exit("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) +