1

I have a class that works with various values, and another that reads values from an external file. I need the other one to replace the values of the values class with the values taken from the file. Is there a way to do this?

I guess I could submit my code here, but I don't think it'll be of much help because it's in my mother language and it involves a lot of parameters you're not familiar with.

The large number values you see are the values I need to change.

class Properties:
'''Calculates the amount of insurance and/or remedies for a person
when given a certain set of parameters.
'''
def input(self, kt, aldur, heimilisfang, busetutimi, maki, born, sjomennska,
tekjur, ororkuhlutfall, ororkualdur, frestun_ellilifeyris,
byr_einn, bifreidarstyrkur):
    self.kt = kt
    self.aldur = aldur
    self.heimilisfang = heimilisfang
    self.maki = maki
    self.born = born
    self.busetutimi = busetutimi
    self.sjomennska = sjomennska
    self.tekjur = tekjur
    self.ororkuhlutfall = ororkuhlutfall
    self.ororkualdur = ororkualdur
    self.frestun_ellilifeyris = frestun_ellilifeyris
    self.byr_einn = byr_einn
    self.bifreidarstyrkur = bifreidarstyrkur

    #Ororkulifeyrir reiknadur.

    baetur = 0
    ororkustyrkur = 25175
    ororkustyrkur_62 = 34053
    ororkulifeyrir = 408636/12
    ellilifeyrir = 408636/12                            #Deilt med 12 thvi thetta a ad vera manadarlega.

    if aldur < 67 and ororkuhlutfall >= 75 and not sjomennska:           #Reiknar ororku.
        baetur = baetur + ororkulifeyrir
        print "-1 Ororkulifeyrir. Baeturnar eru nu samtals %s." % baetur

    if 18 < aldur < 62 and 50 <= ororkuhlutfall < 75 and tekjur < 2575220 and aldur < 67:
        baetur = baetur + ororkustyrkur
        print "-1 Ororkustyrkur. Baeturnar eru nu samtals %s." % baetur
    elif 18 < aldur < 62 and 50 <= ororkuhlutfall< 75 and 2575220 < tekjur < 4209764/12:
        baetur = baetur + ororkustykur*0.75
        print "-1 Skertur ororkustyrkur. Baeturnar eru nu samtals %s." % baetur
    else:
        print "-1 Enginn ororkustyrkur."

    if 62 <= aldur and 50 <= ororkuhlutfall < 75 and not sjomennska:
        baetur = baetur + ororkustyrkur_62
        print "-1 Ororkustyrkur 62 ara og eldri. Baeturnar eru nu samtals %s." % baetur

    #Ellilifeyrir, tekjutrygging, barnalifeyrir og aldurstengd ororkuuppbot reiknud.

    if sjomennska:
        print "Sjomennska valin."
        if busetutimi < 40 and aldur >= 60:
            ellilifeyrir = ellilifeyrir * busetutimi/40
            print "0 Busetuskertur ellilifeyrir."

        if 75 <= ororkuhlutfall:
            if 2575220/12 < tekjur < 4209764/12 and  aldur >= 67:
                ellilifeyrir = ellilifeyrir * 0.75  #Ellilifeyrir skerdist um 25%
                baetur = baetur + ellilifeyrir
                print "1 Skertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
            elif tekjur < 2575220/12 and aldur >= 67:
                baetur = baetur + ellilifeyrir
                print "1 Oskertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
            else:
                print "1 Enginn ellilifeyrir."

            if aldur >= 67 and tekjur > 1315200/12:
                tekjutrygging = 1289528/12           #Tekjutrygging manadarlega
                baetur = baetur + tekjutrygging * (1-0.3835)
                print "2 Skert tekjutrygging fyrir ellilifeyristhega. Baetur eru nu samtals %s kr." % baetur
            elif aldur >= 67 and not tekjur > 2575220/12:
                tekjutrygging = 1289528/12
                baetur = baetur + tekjutrygging
                print "2 Oskert tekjutrygging fyrir ellilifeyristhega. Baetur eru nu samtals %s kr." % baetur
            else:
                print "2 Engin tekjutrygging fyrir ellilifeyristhega."

        # if skipunin her ad ofan er naudsynleg thvi utreikningurinn er mismunandi eftir thvi hvort
        # sjomadurinn er fullur oryrki eda ekki. Ef hann er fullur oryrki er gert rad fyrir ad hann vilji
        # vera oryrki til 67 ara aldurs thvi baetur oryrkja eru haerri en baetur ellilifeyristhega.

        else:
            if 2575220/12 < tekjur < 4209764/12 and  aldur >= 60:
                ellilifeyrir = ellilifeyrir * 0.75  #Ellilifeyrir skerdist um 25%
                baetur = baetur + ellilifeyrir
                print "1 Skertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
            elif tekjur < 2575220/12 and aldur >= 60:
                baetur = baetur + ellilifeyrir
                print "1 Oskertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
            else:
                print "1 Enginn ellilifeyrir."

            if aldur >= 60 and tekjur > 1315200/12:
                tekjutrygging = 1289528/12           #Tekjutrygging manadarlega
                baetur = baetur + tekjutrygging * (1-0.3835)
                print "2 Skert tekjutrygging fyrir ellilifeyristhega. Baetur eru nu samtals %s kr." % baetur
            elif aldur >= 60 and not tekjur > 2575220/12:
                tekjutrygging = 1289528/12
                baetur = baetur + tekjutrygging

                print "2 Oskert tekjutrygging fyrir ellilifeyristhega. Baetur eru nu samtals %s kr." % baetur
            else:
                print "2 Engin tekjutrygging fyrir ellilifeyristhega."

        if 75 <= ororkuhlutfall and aldur <= 67 and tekjur < 2575220/12:
            tekjutrygging = 1308604/12
            baetur = baetur + tekjutrygging
            print "3 Oskert tekjutrygging fyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        elif 75 <= ororkuhlutfall and aldur <= 67 and 2575220/12 < tekjur < 4209764/12:
            tekjutrygging = 1308604/12
            baetur = baetur + tekjutrygging * (1-0.3835)
            print "3 Skert tekjutrygging fyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        else:
            print "3 Engin tekjutrygging fyrir oryrkja."

        if 75 <= ororkuhlutfall and aldur <= 67 and born > 0:
            barnalifeyrir = 25175
            baetur = baetur + barnalifeyrir * born
            print "4 Barnalifeyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        else:
            print "4 Enginn barnalifeyrir oryrkja."

        # Naudsynlegt er ad adili bui einn til ad eiga rett a heimilisuppbot.
        # Heimilisuppbot er skert likt og tekjutrygging.

        frestunartugabrot = frestun_ellilifeyris / 200

        # Frestunartugabrotid er notad i linunni her a eftir. Deilt er med 2 thvi baeturnar eru haekkadar
        # um 0,5% fyrir hvern frestunarmanud. Deilt er med 100 til ad fa ut tugabrot.

        baetur = baetur + baetur * frestunartugabrot

        # Baetur eru haekkadar i hlutfalli vid frestunartugabrot og thar med fjolda frestunarmanada.

        # Frestun ellilifeyris. Gert er rad fyrir ad allir sjomenn vilji 1) Ororkulifeyri til 67 ara aldurs,
        # thvi ad baeturnar eru haerri hja oryrkjum en ellilifeyristhegum vegna aldurstengdrar ororkuuppbotar,
        # og 2) Fresta ellilifeyri um 5 ar thvi their munu hafa ororkulifeyri fram til 67 ara aldurs.

        for item in aldurstengd_ororka.keys():
            for age in item:
                if ororkualdur == age and aldur < 67 and 75 <= ororkuhlutfall:
                    baetur = baetur + ororkulifeyrir * aldurstengd_ororka[item]
                    print "5 Aldurstengd ororkuuppbot. Baetur eru nu samtals %s kr." % baetur
                    print "5.1 Reiknast sem %s prosent af ororkulifeyri." % aldurstengd_ororka[item]


    else:
        print "Sjomennska ekki valin."
        if busetutimi < 40 and aldur >= 67:
            ellilifeyrir = ellilifeyrir * busetutimi/40
            print "0 Busetuskertur ellilifeyrir."
        else:
            print "0 Oskertur ellilifeyrir vegna busetu eda yngri en 67."

        if 2056404/12 < tekjur < 4209764/12 and aldur >= 67:     #Hamarkstekjur an skerdingar
            ellilifeyrir = ellilifeyrir * 0.75  #Ellilifeyrir skerdist um 25%
            baetur = baetur + ellilifeyrir
            print "1 Skertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
        elif tekjur < 2056404/12 and aldur >= 67:
            baetur = baetur + ellilifeyrir
            print "1 Oskertur ellilifeyrir. Baeturnar eru nu samtals %s kr." % baetur
        else:
            print "1 Enginn ellilifeyrir."

        if aldur >= 67 and tekjur < 2575220/12:
            tekjutrygging = 1289528/12           #Tekjutrygging manadarlega
            baetur = baetur + tekjutrygging
            print "2 Oskert tekjutrygging fyrir ellilifeyristhega. Baeturnar eru nu samtals %s kr." % baetur
        elif aldur >= 67 and 2575220/12 < tekjur < 4209764/12:
            tekjutrygging = 1289528/12
            baetur = baetur + tekjutrygging * (1-0.3835)
            print "2 Skert tekjutrygging fyrir ellilifeyristhega. Baeturnar eru nu samtals %s kr." % baetur
        else:
            print "2 Engin tekjutrygging fyrir ellilifeyristhega."

        if 75 <= ororkuhlutfall and aldur <= 67 and tekjur < 2575220/12:
            tekjutrygging = 1308604/12
            baetur = baetur + tekjutrygging
            print "3 Oskert tekjutrygging fyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        elif 75 <= ororkuhlutfall and aldur <= 67 and 2575220/12 < tekjur < 4209764/12:
            tekjutrygging = 1308604/12
            baetur = baetur + tekjutrygging * (1-0.3835)
            print "3 Skert tekjutrygging fyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        else:
            print "3 Engin tekjutrygging fyrir oryrkja."

        if 75 <= ororkuhlutfall and aldur <= 67 and born > 0:
            barnalifeyrir = 302100/12
            baetur = baetur + barnalifeyrir * born
            print "4 Barnalifeyrir oryrkja. Baetur eru nu samtals %s kr." % baetur
        else:
            print "4 Enginn barnalifeyrir oryrkja."

        # Naudsynlegt er ad adili bui einn til ad eiga rett a heimilisuppbot.

        frestunartugabrot = frestun_ellilifeyris / 200

        # Frestunartugabrotid er notad i linunni her a eftir. Deilt er med 2 thvi baeturnar eru haekkadar
        # um 0,5% fyrir hvern frestunarmanud. Deilt er med 100 til ad fa ut tugabrot.

        baetur = baetur + baetur * frestunartugabrot

        # Baetur eru haekkadar i hlutfalli vid frestunartugabrot og thar med fjolda frestunarmanada.

        for item in aldurstengd_ororka.keys():
            for age in item:
                if ororkualdur == age and aldur < 67 and 75 < ororkuhlutfall:
                    baetur = baetur + ororkulifeyrir * aldurstengd_ororka[item]
                    print "5 Aldurstengd ororkuuppbot. Baeturnar eru nu samtals %s kr." % baetur
                    print "5.1 Reiknast sem %s prosent af ororkulifeyri." % aldurstengd_ororka[item]

    if byr_einn:
        if tekjur < 2575220/12:
            heimilisuppbot_var = 380028/12
            baetur = baetur + heimilisuppbot_var
            print "6 Oskert heimilisuppbot. Baetur eru nu samtals %s." % baetur
        if 2575220/12 < tekjur < 4209764/12:
            heimilisuppbot_varar = (3800289/12) * (1-0.3835)
            baetur = baetur + heimilisuppbot_var
            print "6 Skert heimilisuppbot. Baetur eru nu samtals %s." % baetur

    if bifreidarstyrkur:
        baetur = baetur + 12587
        print "7 Styrkur vegna reksturs bifreidar. Baetur eru nu samtals %s kr." % baetur

    if maki:
        baetur = baetur + 37739
        print "8 Framfærsluuppbot. Baetur eru nu samtals %s kr." % baetur

    print "Baetur eru %s kr." % baetur

1 Answer 1

2

Instead of having lots of attributes, I'd use one dict:

self.data = dict(baetur = 0,
                 ororkustyrkur = 1,
                 ororkustyrkur_62 = 2,
                 ororkulifeyrir = 3,
                 ellilifeyrir = 4)

Then, after loading the new data from the file:

newdata = dict(baetur = 10,
               ororkustyrkur = 20,
               ororkustyrkur_62 = 30,
               ororkulifeyrir = 40,
               ellilifeyrir = 50)

you can update self.data with:

self.data.update(newdata)

If you define input like this:

class Properties:
    '''Calculates the amount of insurance and/or remedies for a person
    when given a certain set of parameters.
    '''
    def input(self, **data):
        self.data = data

Then you can still call it like this:

prop.input(kt=0, adlur=1, ...)

or by using keyword-unpacking syntax:

prop.input(**data)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.