Kapitel 10, 11 och 12

This commit is contained in:
Jack-Benny Persson 2024-02-03 20:59:42 +01:00
parent accdeca47b
commit dfe6ba8c30
7 changed files with 166 additions and 0 deletions

View File

@ -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)

View File

@ -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)))

16
kapitel10/hamta-data.py Normal file
View 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/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)

12
kapitel10/julafton.py Normal file
View File

@ -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()])

View File

@ -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))

43
kapitel11/husdjur.py Normal file
View File

@ -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)

View File

@ -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)