Python 在列表中嵌入的元组中存储多个用户类实例
我试图在一个元组中存储用户输入对象的多个实例,然后在单个列表中存储每个元组一次。 以下是我的脚本代码:Python 在列表中嵌入的元组中存储多个用户类实例,python,Python,我试图在一个元组中存储用户输入对象的多个实例,然后在单个列表中存储每个元组一次。 以下是我的脚本代码: class HolidayData: def __init__(self, idnum, dcity): self.idnum = idnum self.dcity = dcity def main(): global holiday_data_obj global holiday_database h
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_对象和database_列表以检查重复值,但结果是相同的输出模式。问题在于附加逻辑。每次您获得一个新项目时,您都会将整个包列表添加到“数据库”中。因此,第一次只添加新包。第二次,添加第一个和第二个包。第三次,添加所有三个包
在每次迭代中只添加最新的包。或者,将它们全部收集到包列表中,然后仅在用户输入
n
后将它们添加到数据库中。这两种方法都会导致问题。问题在于附加逻辑。每次您获得一个新项目时,您都会将整个包列表添加到“数据库”中。因此,第一次只添加新包。第二次,添加第一个和第二个包。第三次,添加所有三个包
在每次迭代中只添加最新的包。或者,将它们全部收集到包列表中,然后仅在用户输入
n
后将它们添加到数据库中。这两种方法都会导致您的问题。您知道我是如何在每次迭代中只添加最新的包的吗?我已经尝试使用“in”来检查与“no success”的相似性。您遇到了什么问题?您可以在add\u packages
的第一行创建对象。正如我所说,只添加那个,而不是整个包列表(下面的循环)。我被困在哪里追加而没有遇到名称空间问题。你知道我如何在每次迭代中只添加最新的包吗?我已经尝试使用“in”来检查与否的相似性。你被困在哪里?您可以在add\u packages
的第一行创建对象。正如我所说,只添加那个,而不是整个包列表(下面的循环)。我被困在哪里追加而没有遇到名称空间问题