Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Tekijä: Henri Kettunen
- # Opiskelijanumero: 0373659
- # Päivämäärä: 06.11.2011
- # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: Python 3 - ohjelmointiopas,
- # luennot
- # Määritellään muuttujat, luokat ja listat sekä tuodaan kirjastot:
- import math
- polttoaineet = []
- talot = []
- # Ekasta:
- class Polttoaine:
- nimi = ""
- lampoarvo = "0"
- hinta = "0"
- kosteus = "0"
- # Kakosesta:
- class Talo:
- nimi = ""
- leveys = "0"
- syvyys = "0"
- sislampotila = "0"
- energiaos = "0"
- psyvyys = "0"
- ppituus = "0"
- ptyyppi = "0"
- tyyppireal = "0"
- class DN25():
- Dp = "0.0337" # m
- Di = "0.1181" # m
- Ds = "0.025" # m
- E = "0.275" # m
- class DN40():
- Dp = "0.0483" # m
- Di = "0.1331" # m
- Ds = "0.040" # m
- E = "0.290" # m
- class DN50():
- Dp = "0.0603" # m
- Di = "0.1531" # m
- Ds = "0.050" # m
- E = "0.310" # m
- class DN65():
- Dp = "0.0761" # m
- Di = "0.1749" # m
- Ds = "0.065" # m
- E = "0.330" # m
- class DN80():
- Dp = "0.0889" # m
- Di = "0.1923" # m
- Ds = "0.080" # m
- E = "0.350" # m
- Qj = 0
- Qm = 0
- Rm = 0
- Ri = 0
- Rg = 0
- H = 0
- KOO = 0
- fii = 0
- lampohavio_v = 0
- fii_lampohavio = 0
- xii = 0
- M = 0
- V = 0
- # Ekasta:
- kok_lampomaara = 0
- kosteus = 0
- lampoarvo = 0
- polttoainemaara = 0
- tarvittava_maara = 0
- hinta = 0
- kustannus = 0
- # Kakosesta:
- korkeus = 2.45
- lampokerroin_seina = 0.17 # W / (m^2 * K)
- lampokerroin_lattia = 0.16 # W / (m^2 * K)
- lampokerroin_katto = 0.09 # W / (m^2 * K)
- lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
- # Kolkista:
- hgs = 13.5 # W / m^2 °C
- lambda_i = 0.03 # W / m^2 °C
- lambda_e = lambda_i
- lambda_g = 2.3 # W / m^2 °C
- Tm = 85 # °C
- Tp = 55 # °C
- Tg = 5 # °C
- Cp = 4200 # J / kg
- roo = 980 # kg / m^3
- pi = math.pi
- # Määritetään aliohjelmat:
- # Valikko:
- def Valikko():
- print("********************************")
- print("1) Syötä polttoaine")
- print("2) Syötä talon tiedot")
- print("3) Määritä maan lämmönjohtavuus")
- print("4) Laske polttoaineen tarve ja hinta")
- print("5) Kirjoita polttoaineen tarpeet ja hinnat CSV-tiedostoon")
- print("6) Tallenna tiedot")
- print("7) Lataa tiedot")
- print("0) Lopeta")
- valinta = input("Valintasi: ")
- return valinta
- # Ekasta:
- def Laskin_Maara(kok_lampomaara, lampoarvo, kosteus):
- kilowatit = 3.6 * kok_lampomaara
- polttoainemaara = kilowatit / float(lampoarvo)
- if float(kosteus) == -1:
- tarvittava_maara = float(polttoainemaara)
- tarvittava_maara = round(tarvittava_maara)
- return tarvittava_maara
- else:
- kosteus_100 = 100 - float(kosteus)
- tarvittava_maara = (polttoainemaara / kosteus_100) * 100
- tarvittava_maara = round(tarvittava_maara)
- return tarvittava_maara
- def Laskin_Kustannus(kok_lampomaara, lampoarvo, kosteus, hinta):
- kilowatit = 3.6 * kok_lampomaara
- polttoainemaara = kilowatit / float(lampoarvo)
- if float(kosteus) == -1:
- tarvittava_maara = float(polttoainemaara)
- kustannus = tarvittava_maara * float(hinta)
- kustannus = round(kustannus)
- kustannus = str(kustannus)
- return kustannus
- else:
- kosteus_100 = 100 - float(kosteus)
- tarvittava_maara = (polttoainemaara / kosteus_100) * 100
- kustannus = tarvittava_maara * float(hinta)
- kustannus = round(kustannus)
- kustannus = str(kustannus)
- return kustannus
- def Syota_polttis(polttoaineet):
- polttoaine = Polttoaine()
- polttoaine.nimi = input("Anna polttoaineen nimi: ")
- polttoaine.lampoarvo = float(input("Anna tehollinen lämpöarvo (MJ/kg): "))
- polttoaine.hinta = float(input("Anna hinta (€/kg): "))
- polttoaine.kosteus = float(input("Anna kosteusprosentti (-1 == ei käsitellä): "))
- polttoaineet.append(polttoaine)
- print()
- def Tulostus(nimi, leveys, syvyys, sislampotila, ppituus, ptyyppi, polttoaineet, fii, V):
- kok_lampomaara = fii
- print("======================================================================")
- print(nimi)
- print("Pinta-ala:", str(float(round((leveys * syvyys), 1))) + "m2, Sisälämpötila:", str(sislampotila) + "° C")
- print("Putken pituus:", str(ppituus) + "m, Tyyppi:", str(ptyyppi) + ", Maksimivirtausnopeus:", str(float(round((V), 6))) + "m/s")
- print("Polttoaine----------Tarvittava määrä-(kg)-------Kustannus-(€)---------")
- for aine in polttoaineet:
- tarvittava_maara = Laskin_Maara(kok_lampomaara, aine.lampoarvo, aine.kosteus)
- kustannus = Laskin_Kustannus(kok_lampomaara, aine.lampoarvo, aine.kosteus, aine.hinta)
- print("-"+"{0:20} ".format(aine.nimi), end = "")
- print("{0:19} ".format(tarvittava_maara), end = "")
- print("{0:>19} ".format(kustannus))
- # Kakosesta:
- def Syota_talo(talot):
- talo = Talo()
- talo.nimi = input("Anna talon nimi: ")
- talo.leveys = float(input("Anna talon leveys (m): "))
- talo.syvyys = float(input("Anna talon syvyys (m): "))
- talo.sislampotila = float(input("Anna haluttu sisälämpötila (°C): "))
- talo.energiaos = float(input("Anna huonetilojen lämmitykseen tarvittavan \
- energian osuus koko talon energian tarpeesta (%): "))
- talo.psyvyys = input("Anna putken syvyys (m): ")
- talo.ppituus = input("Anna putken pituus (m): ")
- print("1 DN25")
- print("2 DN40")
- print("3 DN50")
- print("4 DN65")
- print("5 DN80")
- talo.ptyyppi = input("Valitse putkityyppi (1, 2, 3, 4 tai 5): ")
- if int(talo.ptyyppi) == 1:
- talo.ptyyppi = "DN25"
- elif int(talo.ptyyppi) == 2:
- talo.ptyyppi = "DN40"
- elif int(talo.ptyyppi) == 3:
- talo.ptyyppi = "DN50"
- elif int(talo.ptyyppi) == 4:
- talo.ptyyppi = "DN65"
- elif int(talo.ptyyppi) == 5:
- talo.ptyyppi = "DN80"
- talot.append(talo)
- print()
- def Energiankulutus(tdsto, nimi, leveys, syvyys, sislampotila, energiaos):
- korkeus = 2.45
- lampokerroin_seina = 0.17 # W / (m^2 * K)
- lampokerroin_lattia = 0.16 # W / (m^2 * K)
- lampokerroin_katto = 0.09 # W / (m^2 * K)
- lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
- Ts = int(sislampotila)
- Qj = 0
- # Pinta-alat ja sigma UA:
- ala_lattia = float(leveys) * float(syvyys)
- ala_katto = ala_lattia
- ala_seina1 = float(leveys) * float(korkeus)
- ala_seina2 = float(syvyys) * float(korkeus)
- ala_ikkunat = 0.1 * ala_lattia
- ala_seinat_real = (2 * (ala_seina1 + ala_seina2)) - ala_ikkunat
- UA_lattia = ala_lattia * lampokerroin_lattia
- UA_katto = ala_katto * lampokerroin_katto
- UA_seinat = ala_seinat_real * lampokerroin_seina
- UA_ikkunat = ala_ikkunat * lampokerroin_ikkuna
- UA = UA_lattia + UA_katto + UA_seinat + UA_ikkunat
- # Lämpötilat:
- tiedosto = open(tdsto, "r", encoding="utf-8")
- while True:
- rivi = tiedosto.readline()
- rivi = rivi[:-1]
- lampotila = rivi.split(" ")
- if len(rivi) == 0:
- break
- elif ((int(lampotila[1]) >= 12) or (int(lampotila[1]) > Ts)):
- continue
- else:
- lampotila = rivi.split(" ")
- Tu = int(lampotila[1])
- # Lasketaan arvo Qj PÄIVÄÄ KOHDEN ja summataan kaikki päivät:
- Qj = (Qj + ((UA * (Ts - Tu) * 24) / 1000) * (100 / int(energiaos)))
- tiedosto.close()
- return Qj
- def Mitoitusteho(nimi, leveys, syvyys, sislampotila):
- korkeus = 2.45
- lampokerroin_seina = 0.17 # W / (m^2 * K)
- lampokerroin_lattia = 0.16 # W / (m^2 * K)
- lampokerroin_katto = 0.09 # W / (m^2 * K)
- lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
- Ts = int(sislampotila)
- ala_lattia = float(leveys) * float(syvyys)
- ala_katto = ala_lattia
- ala_seina1 = float(leveys) * float(korkeus)
- ala_seina2 = float(syvyys) * float(korkeus)
- ala_ikkunat = 0.1 * ala_lattia
- ala_seinat_real = (2 * (ala_seina1 + ala_seina2)) - ala_ikkunat
- UA_lattia = ala_lattia * lampokerroin_lattia
- UA_katto = ala_katto * lampokerroin_katto
- UA_seinat = ala_seinat_real * lampokerroin_seina
- UA_ikkunat = ala_ikkunat * lampokerroin_ikkuna
- UA = UA_lattia + UA_katto + UA_seinat + UA_ikkunat
- Qm = ((UA * (Ts + 29) * 1) / 1000)
- return Qm
- # Kolkista:
- def Haviolampovirta(KOO, Tm, Tp, Tg):
- fii_lampohavio = 2 * (KOO) * abs(((Tm + Tp) / 2) - Tg)
- return fii_lampohavio
- def Lammonsiirtokerroin(Rg, Ri, Rm):
- KOO = 1 / (Rg + Ri + Rm)
- return KOO
- def Vaahdotettu_lampovastus(Di, Dp, lambda_i, pi):
- Ri = (1 / (2 * pi * lambda_i)) * math.log(Di / Dp)
- return Ri
- def Keskinainen_lampovastus(pi, lambda_g, H, E):
- Rm = (1 / (4 * pi * lambda_g)) * math.log(1 + ((2 * H) / E ) ** 2)
- return Rm
- def Maaperan_lampovastus(lambda_g, pi, H, Dc):
- Rg = (1 / (2 * pi * lambda_g)) * math.log((4 * H) / Dc)
- return Rg
- def Maakerros_korjaus(syvyys, lambda_g, hgs):
- H = syvyys + (lambda_g / hgs)
- return H
- def Massavirta(fii_mit, Cp):
- M = fii_mit / (Cp * 30)
- return M
- def Lampoteho(fii_mit, fii_lampohavio):
- fii = fii_mit + fii_lampohavio
- return fii
- def Tilavuusvirta(fii, Cp, roo, halk, pi):
- V = fii / (Cp * roo * 35 * ((halk / 2) ** 2) * pi)
- return V
- def Lampohavio_vuodessa(fii, pituus):
- lampohavio = ((fii * float(pituus) * 24 * 365) / 1000)
- return lampohavio
- # Tietojen tallennus ja lataus:
- def Tallenna_tiedot(talot, polttoaineet):
- if (len(talot) or len(polttoaineet)) == 0:
- print("Tarvittavia arvoja ei ole määritelty.")
- print()
- else:
- try:
- tiedostonnimi_tal = input("Anna tallennettavan tiedoston nimi: ")
- tiedosto_talleta = open(tiedostonnimi_tal, "a", encoding="utf-8")
- tiedosto_talleta.write("[polttoaineet]\n")
- for aines in polttoaineet:
- rivi = str(aines.nimi) + ","+ str(aines.lampoarvo) + ","
- rivi = rivi + str(aines.hinta) + "," + str(aines.kosteus) + "\n"
- tiedosto_talleta.write(rivi)
- tiedosto_talleta.write("[talot]\n")
- for tiedot in talot:
- rivi = str(tiedot.nimi) + ","+ str(tiedot.leveys) + ","
- rivi = rivi + str(tiedot.syvyys) + "," + str(tiedot.sislampotila)
- rivi = rivi + "," + str(tiedot.energiaos) + ","
- rivi = rivi + str(tiedot.psyvyys) + ","+ str(tiedot.ppituus) + ","\
- + str(tiedot.ptyyppi) + "\n"
- tiedosto_talleta.write(rivi)
- print("Tiedot tallennettu.")
- tiedosto_talleta.close()
- except IOError:
- print("Tiedoston tallennus epäonnistui.")
- print()
- def Lataa_tiedot():
- tiedostonnimi_av = input("Anna tiedot sisältävän tiedoston nimi: ")
- try:
- tiedosto_avaa = open(tiedostonnimi_av, "r", encoding="utf-8")
- global polttoaineet
- global talot
- polttoaineet = []
- talot = []
- while True:
- rivi = tiedosto_avaa.readline()
- rivi = rivi[:-1]
- if rivi == "[talot]":
- break
- elif rivi == "[polttoaineet]":
- continue
- else:
- aines = Polttoaine()
- ominaisuus = rivi.split(",")
- aines.nimi = ominaisuus[0]
- aines.lampoarvo = float(ominaisuus[1])
- aines.hinta = float(ominaisuus[2])
- aines.kosteus = float(ominaisuus[3][:-1])
- polttoaineet.append(aines)
- while True:
- rivi = tiedosto_avaa.readline()
- rivi = rivi[:-1]
- if len(rivi) == 0:
- break
- elif rivi == "[talot]":
- continue
- else:
- talo = Talo()
- ominaisuus = rivi.split(",")
- talo.nimi = ominaisuus[0]
- talo.leveys = float(ominaisuus[1])
- talo.syvyys = float(ominaisuus[2])
- talo.sislampotila = float(ominaisuus[3])
- talo.energiaos = float(ominaisuus[4])
- talo.psyvyys = float(ominaisuus[5])
- talo.ppituus = float(ominaisuus[6])
- talo.ptyyppi = str(ominaisuus[7])
- talot.append(talo)
- print("Tiedot ladattu.")
- except IOError:
- print("Tiedostossta lataaminen epäonnistui.")
- print()
- # Muut aliohjelmalisäykset:
- def Lammonjoht_muuttuja():
- global lambda_g
- lambda_g = float(input("Anna maan lämmönjohtavuus (W/m, °C): "))
- return lambda_g
- def Tallenna_CSV(talot, polttoaineet):
- polttis = Polttoaine()
- talo = Talo()
- tdsto = input("Anna lämpötilat sisältävän tiedoston nimi: ")
- tdsto2 = input("Anna kirjoitettavan tiedoston nimi: ")
- try:
- tiedosto_kirj = open(tdsto2, "w", encoding="utf-8")
- for talo in talot:
- Qj = Energiankulutus(tdsto, talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.energiaos)
- if talo.ptyyppi == "DN25":
- tyyppireal = DN25()
- elif talo.ptyyppi == "DN40":
- tyyppireal = DN40()
- elif talo.ptyyppi == "DN50":
- tyyppireal = DN50()
- elif talo.ptyyppi == "DN65":
- tyyppireal = DN65()
- elif talo.ptyyppi == "DN80":
- tyyppireal = DN80()
- Ri = Vaahdotettu_lampovastus(float(tyyppireal.Di), float(tyyppireal.Dp), lambda_i, pi)
- H = Maakerros_korjaus(float(talo.psyvyys), lambda_g, hgs)
- Rm = Keskinainen_lampovastus(pi, lambda_g, H, float(tyyppireal.E))
- Rg = Maaperan_lampovastus(lambda_g, pi, H, float(tyyppireal.Di))
- KOO = Lammonsiirtokerroin(Rg, Ri, Rm)
- fii_lampohavio = Haviolampovirta(KOO, Tm, Tp, Tg)
- M = Massavirta(Qj, Cp)
- fii = Lampoteho(Qj, fii_lampohavio)
- lampohavio_v = Lampohavio_vuodessa(fii_lampohavio, talo.ppituus)
- Qm = Mitoitusteho(talo.nimi, float(talo.leveys), float(talo.syvyys), float(talo.sislampotila))
- V = Tilavuusvirta(Qj, Cp, roo, float(tyyppireal.Di), pi)
- xii = fii + lampohavio_v + fii_lampohavio
- kok_lampomaara = fii
- tiedosto_kirj.write(talo.nimi + "\n")
- tiedosto_kirj.write("Pinta-ala," + str(float(round((talo.leveys * talo.syvyys), 1))) + ",m2,Sisälämpötila," + str(talo.sislampotila) + ",° C\n")
- tiedosto_kirj.write("Putken pituus," + str(talo.ppituus) + ",m,Tyyppi," + str(talo.ptyyppi) + ",Maksimivirtausnopeus," + str(float(round((V), 6))) + ",m/s\n")
- tiedosto_kirj.write("Polttoaine,Tarvittava määrä (kg),Kustannus (€)\n")
- for aine in polttoaineet:
- tarvittava_maara = Laskin_Maara(kok_lampomaara, aine.lampoarvo, aine.kosteus)
- kustannus = Laskin_Kustannus(kok_lampomaara, aine.lampoarvo, aine.kosteus, aine.hinta)
- tiedosto_kirj.write(aine.nimi + "," + str(tarvittava_maara) + "," + str(kustannus) + "\n")
- tiedosto_kirj.close
- print("Arvot kirjoitettu tiedostoon.")
- except IOError:
- print("Tiedoston avaaminen epäonnistui.")
- print()
- # Ohjelma pyörii näin:
- def Silmukka():
- while True:
- valinta = Valikko()
- if int(valinta) == 1:
- Syota_polttis(polttoaineet)
- continue
- if int(valinta) == 2:
- Syota_talo(talot)
- continue
- if int(valinta) == 3:
- Lammonjoht_muuttuja()
- print()
- continue
- if int(valinta) == 4:
- polttis = Polttoaine()
- talo = Talo()
- tdsto = input("Anna lämpötilat sisältävän tiedoston nimi: ")
- for talo in talot:
- Qj = Energiankulutus(tdsto, talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.energiaos)
- if talo.ptyyppi == "DN25":
- tyyppireal = DN25()
- elif talo.ptyyppi == "DN40":
- tyyppireal = DN40()
- elif talo.ptyyppi == "DN50":
- tyyppireal = DN50()
- elif talo.ptyyppi == "DN65":
- tyyppireal = DN65()
- elif talo.ptyyppi == "DN80":
- tyyppireal = DN80()
- Ri = Vaahdotettu_lampovastus(float(tyyppireal.Di), float(tyyppireal.Dp), lambda_i, pi)
- H = Maakerros_korjaus(float(talo.psyvyys), lambda_g, hgs)
- Rm = Keskinainen_lampovastus(pi, lambda_g, H, float(tyyppireal.E))
- Rg = Maaperan_lampovastus(lambda_g, pi, H, float(tyyppireal.Di))
- KOO = Lammonsiirtokerroin(Rg, Ri, Rm)
- fii_lampohavio = Haviolampovirta(KOO, Tm, Tp, Tg)
- M = Massavirta(Qj, Cp)
- fii = Lampoteho(Qj, fii_lampohavio)
- lampohavio_v = Lampohavio_vuodessa(fii_lampohavio, talo.ppituus)
- Qm = Mitoitusteho(talo.nimi, float(talo.leveys), float(talo.syvyys), float(talo.sislampotila))
- V = Tilavuusvirta(Qj, Cp, roo, float(tyyppireal.Di), pi)
- xii = fii + lampohavio_v + fii_lampohavio
- Tulostus(talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.ppituus, talo.ptyyppi, polttoaineet, xii, V)
- print("======================================================================")
- print()
- continue
- if int(valinta) == 5:
- Tallenna_CSV(talot, polttoaineet)
- continue
- if int(valinta) == 6:
- Tallenna_tiedot(talot, polttoaineet)
- continue
- if int(valinta) == 7:
- Lataa_tiedot()
- continue
- if int(valinta) == 0:
- print("Kiitos käytöstä, tervetuloa uudestaan!")
- break
- else:
- print("Syöte ei kelpaa.")
- print()
- # Ohjelman suoritus alkaa:
- Silmukka()
- # EOF
Add Comment
Please, Sign In to add comment