+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

无法将对象追加到列表

发布于2021-03-22 03:18     阅读(2519)     评论(0)     点赞(18)     收藏(2)


0

1

2

3

4

5

6

7

我的代码遇到了一些麻烦。这是一个预算应用程序,您可以在其中添加类别,并且可以为每个类别存入/提取资金。问题是我必须将所有交易保存为{“ amount”:x,“ description”:y}格式,并为此创建一个在代码中定义的Amount类对象,但是当我尝试将新的Amount对象添加到列表中,此列表中的每个元素更改为最后一个对象。我了解到,当我添加一个对象时,列表中的所有其他元素都指向同一个对象,这可能是问题所在,但我无法解决。你能帮助我吗?非常感谢(此错误发生在存入和提取方法中)

class Amount:
    
    tot={"amount":0,"description":""}

    def __init__(self,am,descr=""):
        self.tot["amount"]=am
        self.tot["description"]=descr
    
    def getTot(self):
        return self.tot


class Category:

    title=""
    deposit_list=list()
    balance=0

    def __init__(self,name):
        self.title=name
    
    def __str__(self):
        final_string=""
        length=int((30-len(self.title))/2)

        for i in range(0,length):
            final_string+="*"

        final_string+=self.title
        for i in range(0,length):
            final_string+="*"

        final_string+="\n"

        for x in self.deposit_list:
            y=x.getTot()["description"]
            y=y[0:23]
            z=float(x.getTot()["amount"])

            final_string+=y
            l=len(y)
            if l<23:
                for i in range(l,23):
                    final_string+=" "
            
            z=str(z)
            l=len(z)
            if l<7:
                for i in range(l,7):
                    final_string+=" "
            final_string+=z
            final_string+="\n"
        final_string+="Total: "
        final_string+=str(self.balance)

        return final_string

    def get_balance(self):
        return self.balance
    
    def getTitle(self):
        return self.title
        
    def deposit(self,amount,description=""):
        
        if description!="":
            description=str(description)
        
        dep=Amount(amount,description)
        self.deposit_list.append(dep)
        self.balance+=dep.getTot()["amount"]
        
    
    def withdraw(self,amount,description=""):
        
        if description!="":
            description=str(description)
        
        wd=Amount(-1*amount,description)

        if self.check_funds(amount):
            self.deposit_list.append(wd)
            self.balance+=wd.getTot()["amount"]
            return True
        else:
            return False

    def transfer(self,amount,dest):
        descr_dest="Transfer from "
        descr_dest+=self.getTitle()
        descr_src="Transfer to "
        descr_src+=dest.getTitle()
        if self.withdraw(amount,descr_src)==True:
            dest.deposit(amount,descr_dest)
            return True
        else:
            return False

    def check_funds(self,amount):
        if amount>self.balance:
            return False
        else:
            return True

def create_spend_chart(categories):
    return

编辑:对不起,这是一个可以运行的测试

import budget
from unittest import main

food = budget.Category("Food")
food.deposit(1000, "initial deposit")
food.withdraw(10.15, "groceries")
food.withdraw(15.89, "restaurant and more food for dessert")
clothing = budget.Category("Clothing")
food.transfer(50, clothing)

print(food)

它应打印以下内容:

*************Food*************
initial deposit        1000.00
groceries               -10.15
restaurant and more foo -15.89
Transfer to Clothing    -50.00
Total: 923.96

我还必须说,它只应打印描述的前23个字符,但这对问题而言并不重要。@frno试图避免出现问题中所述的问题,我编辑了更新之前的代码,谢谢!


解决方案


暂无回答

0

1

2

3

4

5

6

7

8

9



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/899983/dfa205b5b53f80dcdf84/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)