#python #python-3.x #dictionary
Вопрос:
contacts = {'John Smith': '1-123-123-123',
'Jane Smith': '1-102-555-5678',
'John Doe': '1-103-555-9012'}
def add_contact(contacts, name, number):
"""
Add a new contact (name, number) to the contacts list.
"""
if name in contacts:
print(name, "is already in contacts list!")
else:
contacts[name] = number
print(add_contact(contacts, 'new_guy', '1234'))
Когда я печатаю это, я получаю none
но если я добавлю еще одну строку print(contacts)
это даст мне none
и новый словарь с 'new_guy' :'1234'.
Каким правильным способом распечатать новый словарь без печати none
?
Комментарии:
1. Вы правильно добавляете в словарь. Вы печатаете неправильно. В инструкции print выводится результат выполнения функции. Ваша функция ничего не возвращает.
2. Верно. Поскольку ваша функция изменяется на месте, не печатайте ее. Тогда просто позвони
add_contact(contacts, 'new_guy', '1234')
print(contacts)
.3. Это будет работать так, как написано, если вы просто добавите
return contacts
в конце своейadd_contact
функции.
Ответ №1:
Так, как у вас есть прямо сейчас, вы печатаете то, что возвращает функция (а это не так). Все, что вам нужно сделать, это отделить свой функциональный вызов и распечатать инструкцию следующим образом:
add_contact(contacts, 'new_guy', '1234')
print(contacts)
Ответ №2:
def add_contact(name, number):
"""
Add a new contact (name, number) to the contacts list.
"""
if name in contacts:
print(name, "is already in contacts list!")
else:
contacts[name] = number
return contacts #put a return statement that will return the updated contacts dictionary
print(add_contact('John Doe', '1234'))
#for simplified version try a dictionary comprehension:
#using the dict.update(), we can use a comprehension inside to iterate from the contacts itself and have a condition if the name is already exists
contacts.update({key: value for key, value in contacts.items() if key not in contacts})
#tho, we can't have a print statement that will tell if the name already exist in the contacts
print(contacts)
>>>output: {'John Smith': '1-123-123-123', 'Jane Smith': '1-102-555-5678', 'John Doe': '1-103-555-9012'}
Ответ №3:
Вы правильно добавляете в словарь. Проблема в вашем заявлении о печати.
Измените это:
print(add_contact(contacts, 'new_guy', '1234'))
Вам нужно немного отделить это.
add_contact(contacts, 'new_guy', '1234')
print(contacts)
Кроме того, поскольку ваш contacts
словарь объявлен глобально, вы не нужно передавать его в функцию следует назвать это как-то по-другому в функции для ясности. Вы можете изменить функцию на:
def add_contact(current_contacts, name, number):
Но не для того, чтобы измениться и внутри функции.
if name in current_contacts:
print(name, "is already in contacts list!")
else:
current_contacts[name] = number
Окончательный код:
contacts = {'John Smith': '1-123-123-123',
'Jane Smith': '1-102-555-5678',
'John Doe': '1-103-555-9012'}
def add_contact(current_contacts, name, number):
"""
Add a new contact (name, number) to the contacts list.
"""
if name in current_contacts:
print(name, "is already in contacts list!")
else:
current_contacts[name] = number
add_contact(contacts, 'new_guy', '1234')
print(contacts)
Комментарии:
1. Советовать ему полагаться на глобальный — плохой совет. Я бы удалил это предложение. Глобалы — это зло.
2. ОП
add_contact
будет работать с любым словарем контактов. Это просто совпадение, что он имеет то же название, что и глобальный. Переход на использование глобального вместо этого уменьшает функциональность. Это не имеет никакого значения для опубликованного примера, но должно быть отмечено в вашем комментарии.3. @tdelaney Это правда, я просто не думал об этом, учитывая, что он использует одно и то же имя, и именно поэтому это не должно быть одно и то же имя. Я отредактирую его, чтобы изменить.