Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Sqlite: tehtavalista (ajoissa/myöhässä)

koodaaja [18.06.2021 01:14:45]

#

Tässä on Sqlite-kirjastolla tehty tehtavalista. Tietokantaan tallennetaan tehtävä, myöhästyminen ja tärkeysaste. Lisäksi poluksi tehdään kumulatiivinen myöhästymispalkit.

import datetime
from datetime import datetime
import sqlite3
import matplotlib.pyplot as plt
import numpy as np
from itertools import accumulate
from operator import add

#Otetaan yhteys tietokantaan
try:
 conn = sqlite3.connect('aika.db')
except:
 print("Ei onnistunut")

myohassaSumma = []
ajoissaSumma = []
jatko = 1

print("Anna vuosi")
vuosi = int(input())
print("Anna kuukausi")
kuukausi = int(input())
print("Anna kuukauden päivä")
paiva = int(input())
while (jatko == 1):
	#Syötetään tehtävän nimi, tärkeysaste ja deadline.
	#Katsotaan, sitten kuinka paljon tehtävä on myöhässä
	nyt = datetime.now()

	print("Syötä tehtävän nimi")
	tehtava = input()
	print("Onko tehtävä tärkeä 1) kyllä")
	tarkea = int(input())

	print("Anna tunti")
	tunti = int(input())
	print("Anna minuutti")
	minuutti = int(input())


	sitten = datetime(vuosi,kuukausi,paiva,tunti,minuutti,0);

	erotus = (nyt-sitten).total_seconds()

	myohassa = ""
	tarkeys = ""

        #Katsotaan, kuinka paljon tehtävä on myöhässä
	tunnit = divmod(erotus,3600)[0]

	if (erotus > 0):
	 myohassa = "Myöhässä"
	 ajoissaSumma.append(0)
	 myohassaSumma.append(tunnit*60+minuutit)

	else:
	 minuutit = divmod(erotus,60)[0]-(abs(tunnit)+1)*60

	 myohassa = "Ajoissa"
	 tunnit += 1
	 tunnit = abs(tunnit)
	 myohassaSumma.append(0)
	 ajoissaSumma.append(tunnit*60+minuutit)

	if (tarkeys == 1):
	 tarkeys = "Tärkeä"
	else:
	 tarkea = "Ei tärkeä"

	#Tallennetaan tietokantaan.
	lista = []
	lista.append(tehtava)
	lista.append(tarkeys)
	lista.append(myohassa)
	lista.append(tunnit)
	lista.append(minuutit)

	conn.execute("INSERT INTO aika VALUES (?,?,?,?,?)",lista)


	conn.commit()
	print("Jatketaanko 1) Kyllä")
	jatko = int(input())

#Piirretään kaaviot, joka kertoo kumulatiivisesti myöhästäymisen

summa1 = [abs(x) for x in ajoissaSumma]

summa2 = [abs(x) for x in myohassaSumma]

kumulatiivinenAjoissa = list(accumulate(summa1,add))
kumulatiivinenMyohassa = list(accumulate(summa2,add))
print(kumulatiivinenAjoissa)
print(kumulatiivinenMyohassa)
pituus = len(kumulatiivinenAjoissa)
X = np.arange(pituus)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X,kumulatiivinenAjoissa,color='g', width=0.25)

ax.bar(X+0.25,kumulatiivinenMyohassa,color='r', width=0.25)
plt.show()

conn.close() #Täytyy muistaa sulkea yhteys!

jalski [19.06.2021 12:41:53]

#

Oletko muuten huomannut, että:

tulosTunti = int(tulos/60)
tulosMinuutit = tulos%60

Sijasta voisit käyttää:

tunnit, minuutit = divmod(kokonaisminuutit, 60)

Minulla on sinulle parannusehdotus:

Käytä oikeita standardimuotoisia päivämääriä ja aikoja. Tallenna kuvaus ja aika Sqlite tietokantaan. Rakenna "päättymätön" lista "lennossa" tietokannasta hakemistasi tiedoista.

koodaaja [20.06.2021 12:16:18]

#

Ohjelma on muutettu nyt komentorivipohjaiseksi ja siihen on lisätty yhteys tietokantaan.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta