2015-11-01 3 views
0
def command_add(date, event, calendar): 
if date not in calendar: 
    calendar[date] = list() 
calendar[date].append(event) 


calendar = {} 
command_add("2015-10-29", "Python class", calendar) 
command_add("2015-10-12", "Eye doctor", calendar) 
command_add("2015-10-12", "lunch with sid", calendar) 
command_add("2015-10-29", "Change oil in blue car", calendar) 
command_add("2015-10-29", "test car", calendar) 
print(calendar) 

def command_show(calendar): 
    for (date, event) in sorted(calendar.items()): 
     print(date+':') 
     for i in enumerate(event): 
      print(' '+str(i[0])+': '+i[1]) 

command_show(calendar) 

def command_delete(date, entry_number, calendar): 
for (date, event) in sorted(calendar.items()): 
    for i in enumerate(event): 
     del i[entry_number] 

def command_delete(date, entry_number, calendar): 
    for (date, event) in sorted(calendar.items()): 
     for i in enumerate(event): 
      i.remove(entry_number) 


command_delete("2015-10-29", 2, calendar) 
command_show(calendar) 

Я пробовал эти 2 метода, но я не могу понять, как получить доступ к событиям для удаления определенного события на дату вызов на command_delete должен удалить 3-й вход в command_add функции, так как он начинает отсчет от 0удалить элемент в списке (события) в списке (даты)

ошибки-х я получить кортеж объекта оленьей кожу удаления поддержки элемента или удалить

+0

'enumerate' возвращает' tuple': ie' (0, event [0]), (1, event [1]), (2, event [2]), ... 'Это означает, что' i' является 'tuple', который является неизменным – Pynchia

+0

, существует множество проблем с кодом. 0) две функции имеют имя 'command_delete'. 1) Параметр 'date' перезаписывается и, следовательно, теряется. 2) Где совпадает код, который проверяет параметр 'date'? то есть параметр «дата» не используется. 3) Почему вы сортируете календарь? Затем используйте 'bisect' на отсортированном seq ... 4) отступ в функции' command_add' неправильный – Pynchia

+0

да я поставил 2 варианта для удаления команды, которые я попытался, потому что они оба не работали, и я подумал, что, возможно, людям по крайней мере нравится см., что я попробовал что-то и что я делаю. im сортируя календарь, поэтому, когда я печатаю его, он выводит в правильном порядке даты. также, если я - кортеж, я могу просто удалить весь набор – Sinoda

ответ

0

Как в моих первоначальных комментарии к коду:

многочисленные проблемы I может видеть; например

0) две функции имеют название command_delete.

1) В функции command_delete:

1.1) Параметр дата перезаписан и, следовательно, теряется.

1.2) Где находится код, который проверяет параметр даты? то есть параметр даты не используется.

1.3) Почему вы сортируете календарь?

1.4) enumerate возвращает кортеж: ie (0, event [0]), (1, event 1), (2, event [2]), ... Это означает, что i является кортежем, который является неизменным , Удивительно, но в command_show вы используете его как кортеж, правильно, а не здесь.

2) Углубление в функции command_add неправильно

Теперь попробуйте с этим

from collections import defaultdict 

def command_add(date, event, calendar): 
    calendar[date].append(event) 


def command_show(calendar): 
    for date, event in sorted(calendar.items()): 
     print(date+':') 
     for i, el in enumerate(event): 
      print(' {}: {}'.format(i, el)) 


def command_delete(date, entry_number, calendar): 
    events = calendar.get(date) 
    if events: 
     del events[entry_number] 


calendar = defaultdict(list) 

command_add("2015-10-29", "Python class", calendar) 
command_add("2015-10-12", "Eye doctor", calendar) 
command_add("2015-10-12", "lunch with sid", calendar) 
command_add("2015-10-29", "Change oil in blue car", calendar) 
command_add("2015-10-29", "test car", calendar) 
command_show(calendar) 

print('now lets delete the "test car" appointment') 

command_delete("2015-10-29", 2, calendar) 
command_show(calendar) 

, который производит

2015-10-12: 
    0: Eye doctor 
    1: lunch with sid 
2015-10-29: 
    0: Python class 
    1: Change oil in blue car 
    2: test car 
now lets delete the "test car" appointment 
2015-10-12: 
    0: Eye doctor 
    1: lunch with sid 
2015-10-29: 
    0: Python class 
    1: Change oil in blue car 

Пожалуйста, найдите время, чтобы изучить поведение defaultdict, например, на PMOTW

+0

это действительно хороший код Мне нравится, как у очищенная моя команда показывает, что это намного логичнее. метод .get действительно хорош для обработки событий. просто для моего разъяснения, как вы можете просто остаться, если события: как это условие. Я ценю это – Sinoda

+0

'calendar.get (date)', по умолчанию возвращает 'None', если ключ' date' отсутствует в словаре. И значение 'None' считается' False' при интерпретации в булевом выражении.Точно так же, как целое число «0» (ноль) и пустая строка '' "' – Pynchia

+0

, если вы считаете, что мой ответ решает вашу проблему правильно и лучше других, отметьте ее как принятую. Спасибо. – Pynchia

Смежные вопросы