Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Taseet

koodaaja [20.06.2021 12:20:27]

#

Tässä esimerkissä tallennetaan taseet tietokantaan ja näytetään ne palkkikaaviossa. Taseet on tässä jaettu vaihto -ja rahoitustaseeseen. Vaihtotase koostuu kauppa, palvelu, tuotannontekijäkorvaus ja tulonsiirtoihin. Rahoitustase koostuu suorista sijoituksista, arvopaperisijoituksista, muista sijoituksista, johdannaisista ja valuuttavarannoista. Pidän tämän jälkeen hieman taukoa, joskin muokkaan edellisiä koodivinkkejä paremmaksi.

from tkinter import *
import matplotlib.pyplot as plt
import numpy as np

def Laske():

 tiedot = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]
 mjn = ["","","","","","","","",""]
 try:
  if (checkvar.get() == 0):
   #Tallennetaan
   tiedosto = open("tiedosto.txt","w")
   mjn[0],mjn[1] = entry.get().split(",")
   mjn[2],mjn[3] = entry2.get().split(",")
   mjn[4],mjn[5],mjn[6] = entry3.get().split(",")
   mjn[7],mjn[8] = entry4.get().split(",")
   for x in mjn:
    tiedosto.write(str(x)+"\n")
   tiedot = [float(x) for x in mjn]

   tiedosto.close()

  else:
   #Ladataam
   tiedosto = open("tiedosto.txt","r")
   mjn = tiedosto.readlines()

   tiedosto.close()

 except:
  print("Virhe!")

 tiedot = [float(x) for x in mjn]
 #Lasketaan vaihto -ja rahoitustase.
 #Piirretään piirakkakaavio
 vaihtotase = sum(tiedot[0:4])
 rahoitustase = sum(tiedot[4:len(tiedot)])
 x = np.array([vaihtotase,rahoitustase])
 y = ["Vaihtotase","Rahoitustase"]
 plt.pie(x,labels=y)
 plt.show()

root = Tk()

#Ohjelmassa on kaksi framea
frame = Frame(root)
frame.pack()

btn = Button(frame,text="Laske",command=Laske)
btn.pack()

checkvar = IntVar()
check = Checkbutton(frame,text="Lataa",variable=checkvar,onvalue=1,offvalue=0)
check.pack()

#Toinen frame
frame2 = Frame(root)

var = StringVar()
label = Label(frame2,textvariable=var)
var.set("Kauppatase/Palvelutase")
label.pack()

entry = Entry(frame2)
entry.pack()

var2 = StringVar()
label2 = Label(frame2,textvariable=var2)
var2.set("Korvaukset/tulonsiirrot")
label2.pack()

entry2 = Entry(frame2)
entry2.pack()

var3 = StringVar()
label3 = Label(frame2,textvariable=var3)
var3.set("Sijoitukset")
label3.pack()

entry3 = Entry(frame2)
entry3.pack()

var4 = StringVar()
label4 = Label(frame2,textvariable=var4)
var4.set("Johdannaiset/valuuttavarannot")
label4.pack()


entry4 = Entry(frame2)
entry4.pack()

frame2.pack()

root.mainloop()

Metabolix [20.06.2021 20:13:47]

#

Itse koodin osalta kommentoin jälleen suunnatonta turhan koodin määrää. Luet 9 eri tietoa yksitellen, voisit käyttää silmukkaa, ja muutat floateiksi 9 eri tietoa, voisit jälleen käyttää vaikka map-funktiota tai foria.

tiedot = []
for asia in ["kauppatase", "palvelutase"]:
  print(f"Syötä {asia}")
  tiedot.append(float(input()))

# ...
tiedot = [float(x) for x in tulokset[rivi]]
tiedot = list(map(float, tulokset[rivi]))

Idean osalta kommentit ovat valitettavasti raskaat:

Tämä ohjelma on aivan absurdi. Missä tilanteessa olisi tarpeen syöttää useita tasetietoja valmiiksi lasketussa muodossa ja hakea niitä rivinumeron perusteella? Oletkohan koskaan edes nähnyt esimerkiksi tilinpäätöslaskelmaa, jossa nämä luvut saadaan joidenkin asioiden summana ja niillä on oikeaa merkitystäkin?

Myös tietokannan käytöstä tämä on sikäli onneton esimerkki, että tässä jokainen rivi on täysin itsenäinen ja siis tietokannasta ei ole varsinaista hyötyä verrattuna vaikka tekstitiedostoon. Et myöskään kerro mitään tietokannan käytöstä, eli koodi ei opeta lukijaa. Tässä ei edes luoda tietokantaan taulua, onko se jo luotu vai tekeekö Python sen jotenkin automaattisesti?

Teoriassa taseen laskennassa tietokannan avulla voisi olla järkeä, jos taulun rivillä olisi tiedon tyyppi, lukuarvo ja ehkä selite (arvopaperi, 1234567,89 €, Putkan osakkeet) ja näistä laskettaisiin summat taseiden näyttämistä varten (tyyppi, SUM(arvo) GROUP BY tyyppi), mutta siinäkin tapauksessa omatekoinen Python-koodi olisi huonompi idea kuin kunnollinen kirjanpito-ohjelma tai edes taulukkolaskentaohjelma.

Eli voisitko koettaa keksiä esimerkkejä, joille on jokin ihan oikea käyttötarkoitus (tai viihdearvo), kiitos! Tai jos tarkoitus on vain esitellä jotain ominaisuutta, sitä pitäisi selittää ja esitellä paljon perusteellisemmin.

Jere Sumell [21.06.2021 06:17:08]

#

Tuo koodaaja sinun koodisi toteuttaa rakenteisen ohjelmoinnin periaatteita.

Itse olen juurtunut 2005 vuodesta saakka olio-perusteiseen paradigmaan, kun ensimetrit otin nimenomaan sen puitteissa ohjelmoinnin maailmaan todella.

Tuossakin sen lisäksi, että on turhaa toistoa, kuten Metabolix totesi, niin sitten vielä jos tämä olisi laajempi ohjelmistokokonaisuus, loisin jonkin yleiskäyttoisen tietotyypin tietokannan käsittelyyn liittyen.

Helposti jos on useita toimintoja samassa ohjelmakoodissa toteutettu, jos ohjelmiston lähdekoodin ylläpitäjä vaihtuu jossain vaiheessa, tämä saa päänsäryn heti alkuunsa, ja vielä kun koodia ei ole dokumentoitu, eli ensisijaisesti kommentoituna, niin ohjelman koodirivien kasvaessa siitä ota erkkikään selvää.

Jere Sumell [21.06.2021 06:25:17]

#

Metabolix kirjoitti:

Eli voisitko koettaa keksiä esimerkkejä, joille on jokin ihan oikea käyttötarkoitus (tai viihdearvo), kiitos!

Lisäisin vielä tuohon lisäksi, että mielestäni tänne putkaan lisätyllä koodiesimerkillä hienoa, jos siinä on myos jokin kasvattava, koulutus-näkokulma.

Mitä viihdeohjelmiin tulee, pidän viihdeohjelmista, on se sitten tietokone-ohjelma tai televisio-ohjelma, ohjelma sekin, niin vääntyneen huumorintajuni ja paljon kieltä pureskelleena käsitän viihdeohjelma-arvon lähinnä etsien kielen ja ihmisen käyttäytymisen ja profiilin perusteella piilotajunnallisia merkityksiä, eli sosiaalipornoa.

koodaaja [22.06.2021 12:22:48]

#

Ohjelmaa on täysin muokattu ja laskee nyt BKT:n ja huoltotaseen

Metabolix [22.06.2021 13:46:58]

#

Älä viitsi vaihtaa viestiä ja koodia kokonaan toiseksi. Kukaan ei voi ymmärtää käytyä keskustelua silloin. Palautin vanhan viestin ja laitoin uuden viestisi erilliseen keskusteluun.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta