请帮我看看下面缺少什么。我首先创建了我类(class)的三个对象并将它们添加到集合列表中。在创建任何其他对象之前,我想检查 以确保列表中不存在该人。如果此人已经存在,则不应再次创建此人。我希望通过执行 if prompt_fname == person.fname 和 prompt_lname == person.lname: 来实现此检查。显然,我做的不正确,因为程序仍然运行并创建了列表中已经存在的同一个人。它创造了这个人两次。我该如何修改才能捕捉到这一点,以便不再创建列表中已经存在的人。此外,不应在循环的每次迭代中一次又一次地创建任何新人。我是编程新手,所以请不要在您的回答中遗漏太多细节。非常感谢。
class Person(object):
personslist = []
'''Creates a person object'''
def __init__(self, firstname, lastname):
self.lname = lastname.title()
self.fname = firstname.title()
Person.personslist.append(self)
def __str__(self):
return "{0} {1}".format(self.fname, self.lname)
def __repr__(self):
return "{0} {1}".format(self.fname, self.lname)
Person("Adamu", "Emeka")
Person("Femi", "Ojukwu")
Person("Wole", "Jonathan")
prompt_fname = "Adamu"
prompt_lname = "Emeka"
print(Person.personslist)
for person in Person.personslist:
if prompt_fname == person.fname and prompt_lname == person.lname:
pass
else:
Person(prompt_fname, prompt_lname)
print(Person.personslist)
产量
[Adamu Emeka, Femi Ojukwu, Wole Jonathan]
[Adamu Emeka, Femi Ojukwu, Wole Jonathan, Adamu Emeka, Adamu Emeka]
使用 Python 3.4.1
请您参考如下方法:
您的循环正在检查每个条目,如果该特定条目不相等,它会创建另一个实例。但是,如果那个特定的条目是相等的,它不会停止,它只是继续到下一个不相等的项目。这就是为什么您实际上在最后得到了 两个 额外条目。
您可以通过保留标志来解决此问题:
found = False
for person in Person.personslist:
if prompt_fname == person.fname and prompt_lname == person.lname:
found = True
break
if not found:
Person(prompt_fname, prompt_lname)
但是,有一种更好的方法可以做到这一点:您的方法效率很低,因为它每次都需要线性扫描。相反,保留一个以全名作为键的对象字典:
class Person(object):
persons_dict = {}
'''Creates a person object'''
def __init__(self, firstname, lastname):
self.lname = lastname.title()
self.fname = firstname.title()
fullname = "%s %s" % (self.fname, self.lname)
Person.persons_dict[fullname] = self
现在您可以简单地一次性检查:
if "%s %s" % (prompt_fname, prompt_lname) not in Person.persons_dict:
