показать задачи 1-5 в зависимости от того, какой сегодня день - PullRequest
1 голос
/ 01 апреля 2012

Я всего лишь 15-летний ребенок, который бездельничает с питоном, я не особо разбираюсь в этом.Надеюсь, мое описание достаточно подробное.

Итак, у меня есть 5 «заданий», и в зависимости от того, какой сегодня день, я хочу, чтобы оно выполнило задание.

(Воскресное задание1, понедельник - задание 2, ... затем в пятницу оно вернется к заданию 1 и т. Д.)

Я назначу начальную дату в воскресенье, 4/1/2012.

Я могу заставить python отображать текущую дату с помощью:

import datetime
from time import strftime 
print strftime("%A, %b %d %Y")

, но это все, что я мог сделать сам: /

Может кто-нибудь помочь мне заставить его отображать 'задачу' в зависимостив какой день я открываю программу?я немного разбираюсь в определении вещей, если и в то время как заявления и простые вещи, если это помогает ... спасибо (извините, если ответ уже есть в другом посте или что-то в этом роде)

1 Ответ

2 голосов
/ 01 апреля 2012

Конечно.Таким образом, вы можете прочитать из документации, что strftime принимает формат и необязательный второй аргумент, который является временем для печати.Время по умолчанию - localtime ().Итак, начнем с этого:

now = localtime()
print now

localtime () возвращает объект struct_time, который задокументирован здесь: http://docs.python.org/library/time.html#time.struct_time.Вы можете видеть, что он содержит информацию, которую вы хотите: его шестое поле - tm_wday, "range [0, 6], Monday - 0."

Теперь вы можете индексировать в словарь задач (однако вы их представляетеЯ пока буду считать строками, но они могут быть функциями или чем-то еще).Может быть что-то вроде этого:

tasks = {
    0: "Stuff to do on Monday.",
    1: "Stuff to do on Tuesday.",
    2: "Stuff to do on Wednesday.",
}

print tasks.get(localtime().tm_wday, "Nothing doing.")

Вау, что это?

Мы создали словарь, используя специальный синтаксис {}, отображая номера дней недели, как определено для struct_time, и мы проиндексировали вэто, печать того, что мы нашли.Но если ничего не было найдено, мы печатаем «Ничего не делая».Это объясняется в документации для класса dict: http://docs.python.org/library/stdtypes.html#dict - get () - это метод, который принимает ключ и необязательное второе значение, которое по умолчанию возвращается, если ключ не найден.Это полезно, если вам нечего делать в определенные дни, но вы не хотите, чтобы в эти дни возникала ошибка.

Редактировать:

ОК, поэтому яТеперь поймите, что вы хотите начать с сегодняшнего дня (1 апреля 2012 г., отметив, что 1 апреля 2012 г. неоднозначно, потому что европейцы пишут даты не так, как американцы).Сегодня вы хотите выполнить задание 1, завтра через 2 и через семь дней вы закончите и будете выполнять задание 3.

Это похоже на работу для оператора по модулю (остаток), %,Всякий раз, когда вы хотите перебрать некоторый набор целых чисел (например, ваши задачи) на основе потенциально большего набора целых чисел (например, календарных дней), может быть полезна арифметика по модулю.В этом случае вам принципиально нужно что-то вроде этого:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[calendar_day % len(tasks)] # len(tasks) is 5

Поскольку calendar_day - это число, которое увеличивается на единицу каждый день, это будет указывать в списке задач с использованием арифметики по модулю, так что вы 'начнем с первого, пошагово перейдем к последнему, затем вернемся к первому и т. д.

Как определить календарный день?Итак, поле tm_yday из struct_time, которое мы видели ранее, выглядит полезным - это день года, от 1 до 366 (в високосные годы, 365 в противном случае).Итак:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[localtime().tm_yday % len(tasks)]

Сегодня на самом деле день номер 92, а 92% 5 - это 2, а Python использует индексацию с нуля, поэтому в приведенном выше примере будет выбрана задача 3 на сегодня.Если вы действительно хотите, чтобы сегодня была Задача 1, просто добавьте соответствующее фиксированное смещение:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[(localtime().tm_yday - 2) % len(tasks)]

Но если вы хотите идеальных результатов, вы можете понять, что 366 не делится равномерно на 5, поэтому после високосных лет выВы увидите «скачок» в вашем списке задач 1 января. И если ваш список задач имел другую длину, у вас могут возникнуть проблемы чаще, когда меняется год.Точное обращение со временем - довольно сложная задача на практике, и я бы пригласил вас открыть новый вопрос об этой конкретной проблеме (и дать ссылку на него в комментарии здесь), если вы заботитесь об этом уровне детализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...