Build a Budget App Project - Build a Budget App Project

Tell us what’s happening:

Hi, i finish my code but i can’t see whats wrong with it…

Can i get some help?

Your code so far

class Category:
    def __init__(self, name):
        self.name = name
        self.ledger = []
        self.money = 0

    def __str__(self):
        title = self.name.center(30, "*") + "\n"
        items = ""
        for item in self.ledger:
            items += f"{item['description'][:23]:23}{item['amount']:>7.2f}\n"
        items += f"Total: {self.money:.2f}" 
        return title + items

    def deposit(self, amount, description = ""):
        self.ledger.append({"amount": amount, "description": description})
        self.money += amount

    def withdraw(self, amount, description = ""):
        if self.check_funds(amount):
            self.deposit(-amount, description)
            return True
        else:
            return False
    
    def get_balance(self):
        return self.money
    
    def transfer(self, amount, another_category):
        if self.check_funds(amount):
            self.withdraw(amount, f"Transfer to {another_category.name}")
            another_category.deposit(amount, f"Transfer from {self.name}")
            return True
        return False

    def check_funds(self, amount):
        return self.get_balance() >= amount

def create_spend_chart(categories):
    spending = {}
    total_spent = 0
    
    for category in categories:
        spent = sum(item['amount'] for item in category.ledger if item['amount'] < 0)
        spending[category.name] = -spent
        total_spent += -spent
    
  
    chart = "Percentage spent by category\n"
    
    
    percentages = {cat: (spent / total_spent) * 100 for cat, spent in spending.items()}
    
    
    highest_percentage = (max(percentages.values()) // 10 + 1) * 10
    
   
    for i in range(100, -1, -10):
        row = f"{i:>3}| "
        for category in categories:
            if percentages.get(category.name, 0) >= i:
                row += "o  "
            else:
                row += "   "
        chart += row.rstrip() + " \n"
    
    
    chart += "    -" + "---" * len(categories) + "\n"
    
    
    max_length = max(len(cat.name) for cat in categories)
    
    
    
    for i in range(max_length):
        row = "    "
        for category in categories:
            if i < len(category.name):
                row += " " + category.name[i] + " "
            else:
                row += "   "
        chart += row.rstrip() + " \n"
    
    return chart.rstrip()

Your browser information:

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

Challenge Information:

Build a Budget App Project - Build a Budget App Project

Tell us more. Are you getting an error?

Are you passing or failing any tests?

What do you need help with?

Welcome to the forum @Nehuenkend

Note: open the browser console with F12 to see a more verbose output of the tests.

The assertion error and diff gives you a lot of information to track down a problem. For example:

AssertionError: 'Year' != 'Years'
- Year
+ Years
?     +

Your output comes first, and the output that the test expects is second.

AssertionError: ‘Year’ != ‘Years’

Your output: Year does not equal what’s expected: Years

This is called a diff, and it shows you the differences between two files or blocks of code:

- Year
+ Years
?     +

- Dash indicates the incorrect output
+ Plus shows what it should be
? The Question mark line indicates the place of the character that’s different between the two lines. Here a + is placed under the missing s .

Here’s another example:

E       AssertionError: Expected different output when calling "arithmetic_arranger()" with ["3801 - 2", "123 + 49"]
E       assert '  3801      123    \n   - 2     + 49    \n------    -----    \n' == '  3801      123\n-    2    +  49\n------    -----'
E         -   3801      123
E         +   3801      123    
E         ?                ++++
E         - -    2    +  49
E         +    - 2     + 49    
E         - ------    -----
E         + ------    -----    
E         ?                +++++

The first line is long, and it helps to view it as 2 lines in fixed width characters, so you can compare it character by character:

'  3801      123    \n   - 2     + 49    \n------    -----    \n'
'  3801      123\n-    2    +  49\n------    -----'

Again, your output is first and the expected output is second. Here it’s easy to see extra spaces or \n characters.

E         -   3801      123
E         +   3801      123    
E         ?                ++++

Here the ? line indicates 4 extra spaces at the end of a line using four + symbols. Spaces are a little difficult to see this way, so it’s useful to use both formats together.

I hope this helps interpret your error!