Build a Budget App Project - Build a Budget App Project

Tell us what’s happening:

My code is failing on last test. Console says its a spacing problem but i cant figure it out pls help

Your code so far

import math
class Category:
    def __init__(self,name):
        self.name=name
        self.ledger=[]
        self.budget=0
        self.title=''
    def __str__(self):
        body=''
        total=0
        if len(self.title)%2==0:
            self.title=self.name
        else:
            self.title=self.name+'*'
        for i in range((30-len(self.title))//2):
            self.title='*'+self.title+'*'
        for trans in self.ledger: 
            for i in range(23):
                try :
                    body+=trans['description'][i]
                except IndexError:
                    body+=' '
            numba='       '
            if str(trans['amount']).find('.')==-1:
                numba=str(trans['amount'])+'.00'
            else:
                numba=str(trans['amount'])
            while len(numba)<7:
                numba=' '+numba
            
            body+=f'{numba}\n'
            total+=trans['amount']
         
        return f'{self.title}\n{body}Total: {total}'

    def check_funds(self,amo):
        if amo<=self.budget:
            return True
        return False

    def deposit(self,amo,des=''):
        self.ledger.append({'amount': amo, 'description': des})
        self.budget+=amo

    def withdraw(self,amo,des=''):
        if self.check_funds(amo):
            self.ledger.append({'amount': 0-amo, 'description': des})
            self.budget=self.budget-amo
            return True  
        return False
    
    def get_balance(self):
        return self.budget

    def transfer(self,amo,cat):
        if self.check_funds(amo):
            self.withdraw(amo,f'Transfer to {cat.name}')
            cat.deposit(amo, f'Transfer from {self.name}')
            return True
        return False

def create_spend_chart(categories):
    print('Percentage spent by category')
    j=0
    catspent=[]
    catpercen=[]
    totspent=0
    #fills catspent with the category name(on 'cat':) and its respective spent money(on 'spe':) and defines total money spent as sum of all spent money
    for category in categories:
        catspent.append({'cat':category.name,'spe':0})
        for trans in category.ledger:
            if trans['amount']<0:
                catspent[j]['spe']=catspent[j]['spe']-trans['amount']
        totspent+=catspent[j]['spe']
        j+=1

    #fills catpercen with category name and its respective percentage of spent money of the total spent by all categories
    for i in catspent:
        catpercen.append({'cat':i['cat'],'perc':(math.floor((i['spe']/totspent)*10))*10})

    #prints lines above the ---------
    k=100
    while k>=0:
        line=''
        if k<100:
            line+=' '
        if k<10:
            line+=' '
        line+=f'{k}| '
        
        line+=''.join('o  ' if cat['perc']>=k else '   ' for cat in catpercen)
        k=k-10
        print(line)

    #prints the ---------
    line='    -'
    for cat in catspent:
        line+='---'
    print(line)

    #prints the lines under the ---------
    maxr=0
    for i in catspent:
        if len(i['cat'])>maxr:
            maxr=len(i['cat'])
    for i in range(maxr):
        line='     '
        line+=''.join(f"{cat['cat'][i]}  " if i<=(len(cat['cat'])-1) else '   ' for cat in catpercen)
        print(line)


food = Category('Food')
food.deposit(1000, 'deposit')
food.withdraw(10.15, 'groceries')
food.withdraw(15.89, 'restaurant and more food for dessert')
clothing = Category('Clothing')
food.transfer(50, clothing)
print(food)
auto=Category('Auto')
auto.deposit(100,'hum')
auto.withdraw(50,'yeah')
print(auto)

create_spend_chart([food,clothing,auto])

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0

Challenge Information:

Build a Budget App Project - Build a Budget App Project

create_spend_chart function should return the string. It should not print anything on it own.

omg im so stupid thank you so much

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.