Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2022, 14:58   #1
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию Удаление ключа с пустым значением

Добрый день. Просьба помочь. Задание такое:Пользователь по команде “ds” может удалить существующую полку из данных (только если она пустая). Я написала код, но строчка с условием по пустым значением видимо неверная (причем пробовала по-разному прописывать). В чем так ошибка, подскажите, пож-та?
Код:
def del_shelf(archive):
  user_command = input('Введите команду: ')
  if user_command ==  'ds':
    user_shelf_del = input('Введите номер полки: ')
    import copy
    copy_2_archive = copy.copy(archive)
    if archive.values() is not None in archive.keys['user_shelf_del']:
      print('На полке есть документы, удалите их перед удалением полки. Текущий перечень полок: ', list(archive.keys()))
    else:
      del(copy_2_archive.keys['user_shelf_del'])
      print('Полка удалена. Текущий перечень полок: ', list(copy_2_archive.keys()))        
del_shelf(directories)
Еще пробовала не is not None, а != None.
И еще так писала эту строчку:
Код:
if {archive.keys['user_shelf_del']: archive.values() is not None}:
Галина_Д вне форума Ответить с цитированием
Старый 22.01.2022, 17:56   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Не понимаю о чём речь, но вот тут:
Код:
if archive.values() is not None in archive.keys['user_shelf_del']:
'user_shelf_del' - это строка. Вместе с тем, в предыдущей строке
Код:
user_shelf_del = input('Введите номер полки: ')
user_shelf_del - ссылка на строку, которую ввёл пользователь.
Т.е. user_shelf_del == 'ds', например, если пользователь ввёл это.
Т.е., по идее должно быть:
Код:
archive.keys[user_shelf_del]
индекс без кавычек.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.01.2022, 22:07   #3
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию

Я разъясню, что к чему: У нас есть словарь (directories). Нам нужно написать функцию, в которой пользователь по команде “ds” может удалить существующую полку (ключ) из данных (только если она пустая). Т.е. пользователь вводит команду, затем номер полки. И нам нужно прописать условие, что если пользовательский ввод, равный одному из ключей в словаре, не имеет значений, то тогда этот ключ удаляем, а если есть, то выводим об этом информацию.
Еще пояснение про создание копии: нужно, чтобы исходный словарь не менялся, поэтому удаление делаем в копии.
Я немного подредактировала код, но у меня не работает условие, т.к. какую бы полку (ключ) я не ввела, он ее удаляет, т.е. срабатывает только else.

Код:
directories = {
'1': ['2207 876234', '11-2'],
'2': ['10006'],
'3': []
}

def del_shelf(archive):
  user_command = input('Введите команду: ')
  if user_command ==  'ds':
    user_shelf_del = input('Введите номер полки: ')
    import copy
    copy_2_archive = copy.copy(archive)
    if user_shelf_del == archive.keys() and archive.values() is not None:
      print('На полке есть документы, удалите их перед удалением полки. Текущий перечень полок: ', list(archive.keys()))
    else:
      del (copy_2_archive[user_shelf_del])
      print('Полка удалена. Текущий перечень полок: ', list(copy_2_archive.keys()))        
del_shelf(directories)
Галина_Д вне форума Ответить с цитированием
Старый 22.01.2022, 22:30   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
directories = {
  '1': ['2207 876234', '11-2'],
  '2': ['10006'],
  '3': []
}

def del_shelf(archive):
  user_command = input('Введите команду: ')
  if user_command == 'ds':
    user_shelf_del = input('Введите номер полки: ')
    import copy
    copy_2_archive = copy.copy(archive)
    if user_shelf_del not in copy_2_archive:
      print('Такой полки не существует. Текущий перечень полок:', list(copy_2_archive))
    elif copy_2_archive[user_shelf_del]:
      print('На полке есть документы, удалите их перед удалением полки. Текущий перечень полок:', list(copy_2_archive))
    else:
      del copy_2_archive[user_shelf_del]
      print('Полка удалена. Текущий перечень полок:', list(copy_2_archive))
      
del_shelf(directories)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.01.2022, 22:35   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Вы запрашиваете у пользователя ключ для удаления, но проверяете нечто странное, без использования запрошенного ключа.
Если условие построить так:
Код:
if archive[user_shelf_del]:
то запрошенный ключ используется.
Если значение словаря не пустое, то условие == True.
В Python все ненулевые (не пустые) значения - Истина.
Число != 0 - True
Число == 0 - False
Строка ' ' или '123' - не пустая (в первом примере вставлен пробел) - True
Строка '' - пустая - False.
[] - пустой список, () - пустой кортеж, {} - пустой словарь, None - это всё False
Это к тому, что иногда проверка на пустоту не нужна.
Но если надо, то:
Код:
if archive[user_shelf_del] != []:
Но тут надо знать, что значение словаря список, а не кортеж, строка или число.

PS: У BDA лучшее предложение. Проверить наличие ключа, а затем ...
Как-то так, ...

Последний раз редактировалось ViktorR; 22.01.2022 в 22:42.
ViktorR вне форума Ответить с цитированием
Старый 22.01.2022, 22:57   #6
Галина_Д
Пользователь
 
Регистрация: 13.01.2022
Сообщений: 14
По умолчанию

Спасибо всем большущее, вариант BDA действительно идеальный
Галина_Д вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка ключа массива и сравнение со значением переменной Javany PHP 2 05.06.2018 07:04
Excel открывается пустым! Arkaban Microsoft Office Excel 18 30.05.2017 13:59
Удаление строк со значением 0 в столбце I Aleksandr_01_ Microsoft Office Excel 0 20.04.2010 13:31
Удаление ключа реестра dolphin705 Общие вопросы Delphi 6 16.03.2009 16:39
проблема с пустым edit'ом SMERSH Помощь студентам 2 15.09.2008 19:26