Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Formatando datas e as usando

Eis a formatação de datas, permitindo que o usuário inclusive digite com trailing zeros:

class Date:
    def __init__(self, day, month, year):
        self.day = int(day)
        self.month = int(month)
        self.year = int(year)

    def formatted_date(self):
        return f"{self.day:02d}/{self.month:02d}/{self.year:4d}"

date_obj = Date(10, 9, 2023)
print(date_obj.formatted_date(), "\n")

date_obj_2 = Date(11, "03", 2020)
print(date_obj_2.formatted_date())

Na sequência se pode usar esta formatação:

from dates import Date

class Account:

    def __init__(self, number, holder, balance, limit=1000):
        self.number = number
        self.holder = holder
        self.balance = balance
        self.limit = limit

    def __str__(self):
        return f"Account: {self.number}, Holder: {self.holder}, Balance: {self.balance}, Limit: {self.limit}"

    def format_value(self, value, account_number=None):
        if account_number is not None and account_number == value:
            return str(value)

        if isinstance(value, float) or not isinstance(value, str):
            return "US${:,.2f}".format(value)
        else:
            return value

    def client_info(self, account):
        result = "Here's the client's information:\n"
        for index, (key, value) in enumerate(account.items(), start=1):
            result += f"{index}) {key}: {self.format_value(value, account['number'])}\n"
        return result

    def print_client_info(self):
        print(self.client_info(vars(self)))

    def deposit(self, value):
        self.balance += value if value > 0 else print(
            "You must deposit a positive value.")

    def withdraw(self, value):
        self.balance -= value if value > 0 else print(
            "You must withdraw a negative value.")

    @classmethod
    def print_client_list(cls, accounts):
        print("Here's a list of all our clients:\n")
        for index, account in enumerate(accounts, start=1):
            print(f"{index}) {account.holder}")
        print()

    @classmethod
    def print_client_names(cls, accounts):
        if len(accounts) > 2:
            first_two_names = ", ".join(account.holder
                                        for account in accounts[:2])
            last_name = accounts[-1].holder
            print(f"{first_two_names}, and {last_name}")
        elif len(accounts) == 2:
            print(f"{accounts[0].holder} and {accounts[1].holder}")
        elif accounts:
            print(accounts[0].holder)
        else:
            print("No account holders")

    def total_balance(self, accounts):
        total_balance = sum(account.balance for account in accounts)
        return self.format_value(total_balance)

    def total_limit(self, accounts):
        total_limit = sum(account.limit for account in accounts)
        return self.format_value(total_limit)


account_1 = Account(123, "Nico", 1000)
account_2 = Account(321, "Marco", 100)
account_3 = Account(666, "Satan", 2679, 2000)

account_1.print_client_info()
account_2.print_client_info()
account_3.print_client_info()

accounts = [account_1, account_2, account_3]
Account.print_client_list(accounts)

print(
    f"The total balance and limit of their accounts are {accounts[0].total_balance(accounts)} and {accounts[0].total_limit(accounts)}, respectively."
)

print()
print(f"Account 1's balance is {account_1.format_value(account_1.balance)}")
print()
print(f"Account 2's account number is {account_2.number}")
print()
print(f"Account 1's limit is {account_1.format_value(account_1.limit)}")
print()
print(
    f"{account_1.holder} would, of course, like to have {account_3.holder}'s limit of {account_3.format_value(account_3.limit)}"
)
print()
account_1.withdraw(500000)
print(
    f"{account_1.holder} went to hospital in NYC to get an aspirin for a minor headache. He now has US${account_1.balance} in his account. He's proper fucked."
)
print()
account_3.deposit(1000000)

date_1 = Date(12, 5, 2023)
print(
    f"{account_3.holder} made {account_3.format_value(100000)} selling shit T-shirts on {date_1.formatted_date()}, cuz life's unfair, so he now has {account_3.format_value(account_3.balance)}."
)
account_2.deposit(85.67)
print()
print(
    f"{account_2.holder} now has a balance of {account_2.format_value(account_2.balance)}"
)
print()
Account.print_client_names(accounts)
print()
account_1.print_client_info()
account_2.print_client_info()
account_3.print_client_info()
print()
date_2 = Date(17, "08", 2017)
print(f"On {date_2.formatted_date()}, {account_3.holder} came to visit and never really went back home.")
1 resposta
solução!

Olá Rafael, tudo bem com você?

Meus parabéns pela resolução do desafio, seu código atende bem a proposta do desafio. Vejo que foi além do proposto e adicionou o uso da formatação de strings assim como a adição da classe Date ao projeto que faz uso da classe Account. Continue com esse empenho, pois, ele é muito importante para o seu desenvolvimento como pessoa programadora.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!