<p>如果可以,应该使用字典而不是列表来实现解决方案,以提高通讯簿的性能。添加名字很简单,除了检查错误之外,添加朋友也很简单。为了获得更完整的解决方案,添加了一个<code>remove_name</code>方法,显示如何正确地删除某人。你知道吗</p>
<pre><code>import collections
def main():
book = SocialAddressBook()
# Add people to the address book.
book.add_name('Fred', 'fred@gmail.com')
book.add_name('Barb', 'barb@gmail.com')
book.add_name('Jane', 'jane@gmail.com')
book.add_name('Emma', 'emma@gmail.com')
book.add_name('Sue', 'sue@gmail.com')
book.add_name('Mary', 'mary@gmail.com')
book.add_name('Lisa', 'lisa@gmail.com')
# Add friends connections in the address book.
book.add_friend('Fred', 'Barb')
book.add_friend('Fred', 'Sue')
book.add_friend('Barb', 'Jane')
book.add_friend('Jane', 'Emma')
book.add_friend('Jane', 'Mary')
book.add_friend('Emma', 'Lisa')
class SocialAddressBook:
def __init__(self):
self.__book = {}
def add_name(self, name, address):
"""Adds name to address book with address and no friends."""
self.__book[name] = BookEntry(address, set())
def add_friend(self, name, friend):
"""Adds a friend to the person referenced by name."""
if friend not in self.__book:
raise ValueError(f'{friend!r} is not in the address book yet')
self.__book[name].friends.add(friend)
def remove_name(self, name):
"""Completely delete someone from the address book."""
del self.__book[name]
for book_entry in self.__book.values():
book_entry.friends.discard(name)
BookEntry = collections.namedtuple('BookEntry', 'address, friends')
if __name__ == '__main__':
main()
</code></pre>
<p>如果可能,请尽快阅读<a href="https://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">PEP 8 Style Guide for Python Code</a>。用Python编写的代码应该符合样式指南,以提高可维护性,并鼓励其他人阅读您的代码并回答您的问题。今后,在提出问题之前,请先解决你的问题。你知道吗</p>