import string class AddressBook: def __init__(self): self.addresses = [] def add_address(self, name, address): self.addresses.append((name, address)) def get_addresses_by_first_letters(self, letters): letters = letters.upper() return [ (name, address) for name, address in self.addresses if any(name.upper().startswith(letter) for letter in letters) ] def __getitem__(self, key): if isinstance(key, str): return self.get_addresses_by_first_letters(key) if isinstance(key, slice): start, stop, step = key.start, key.stop, key.step letters = string.ascii_uppercase[ string.ascii_uppercase.index(start) : string.ascii_uppercase.index(stop) + 1 : step ] return self.get_addresses_by_first_letters(letters) address_book = AddressBook() address_book.add_address("Sherlock Holmes", "221B Baker St., London") address_book.add_address( "Wallace and Gromit", "62 West Wallaby Street, Wigan, Lancashire" ) address_book.add_address("Peter Wimsey", "110a Piccadilly, London") address_book.add_address("Al Bundy", "9764 Jeopardy Lane, Chicago, Illinois") address_book.add_address( "John Dolittle", "Oxenthorpe Road, Puddleby-on-the-Marsh, Slopshire, England" ) address_book.add_address( "Spongebob Squarepants", "124 Conch Street, Bikini Bottom, Pacific Ocean" ) address_book.add_address( "Hercule Poirot", "Apt. 56B, Whitehaven Mansions, Sandhurst Square, London W1" ) address_book.add_address("Bart Simpson", "742 Evergreen Terrace, Springfield, USA") print(string.ascii_uppercase) print(string.ascii_uppercase.index("A")) print(string.ascii_uppercase.index("Z")) print(address_book["A"]) print(address_book["B"]) print(address_book["S"]) print(address_book["A":"H"])