在列表中嵌入的元组中存储多个用户类实例

时间:2018-12-13 20:39:21

标签: python

我试图将用户输入对象的多个实例存储在一个元组中,然后将每个元组一次存储在一个列表中。 这是我的脚本代码:

class HolidayData:       

    def __init__(self, idnum, dcity):

        self.idnum = idnum  
        self.dcity = dcity 

def main():
    global holiday_data_obj 
    global holiday_database
    holiday_data_obj = []
    holiday_database = []

    while True:
        if input("Add Holiday Package? (y/n) ") == "n":
            break
        else:

            idnum = int(input('Enter your unique id number: '))
            dcity = str(input('Enter your destination city : '))

            add_packages(idnum, dcity)
            print_packages()


def add_packages(idnum, dcity):
    holiday_data_obj.append( HolidayData(idnum, dcity))
    for package in holiday_data_obj:
        F = tuple(package.__dict__.values())
        holiday_database.append(F)

def print_packages():    
            print(holiday_database)

这是我得到的输出模式吗?

[(1,'第一城市'),(1,'第一城市'),(2,'第二城市'),(1,'第一城市'),(2,'第二城市'),( 3,“第三城市”)]

我尝试遍历holiday_data_object和database_list以检查重复值,但最终得到了相同的输出模式。

1 个答案:

答案 0 :(得分:2)

问题在于您的附加逻辑。每次获得新项目时,都将 entire 软件包列表添加到“数据库”中。因此,第一次只添加新软件包。第二次,您添加第一个和第二个程序包。第三次,添加所有三个软件包。

在每次迭代中仅添加最新的软件包。或者,将它们全部收集到您的软件包列表中,然后在用户输入n之后将它们添加到数据库中,仅 。两者都造成您的问题。