English 中文(简体)
我如何能够在两天之间全天候?
原标题:How can I get all days between two days?
  • 时间:2009-10-16 11:33:53
  •  标签:

我需要两个星期天。

例:

Wednesday - Friday  = Wednesday, Thursday, Friday  
        3 - 5       = 3, 4, 5

 Saturday - Tuesday = Saturday, Sunday, Monday, Tuesday
        6 - 2       = 6, 7, 1, 2

我确信这里有一条支离破碎的算法来解决这一问题。 唯一的算法是,我可以考虑使用一种 lo或一种<条码>。

必须找到解决该问题的有利途径。 我在周日使用1-7号数字,但0-6也罚款。

我可以提出的最佳选择是:

def between(d1, d2):
     alldays = [0,1,2,3,4,5,6,0,1,2,3,4,5,6]    # or range(7) * 2
     offset = 8 if d1 > d2 else 1
     return alldays[d1:d2 + offset]

between(0, 4)
# [0,1,2,3,4]

between(5,2)
# [5,6,0,1,2]
最佳回答
>>> def weekdays_between(s, e):
...     return [n % 7 for n in range(s, e + (1 if e > s else 8))]
... 
>>> weekdays_between(2, 4)
[2, 3, 4]
>>> weekdays_between(5, 1)
[5, 6, 0, 1]

如果你不得不从实际天数转为实际日子,那就更加复杂。

>>> days =  Mon Tue Wed Thu Fri Sat Sun .split()
>>> days_1 = {d: n for n, d in enumerate(days)}
>>> def weekdays_between(s, e): 
...     s, e = days_1[s], days_1[e]
...     return [days[n % 7] for n in range(s, e + (1 if e > s else 8))]
... 
>>> weekdays_between( Wed ,  Fri )
[ Wed ,  Thu ,  Fri ]
>>> weekdays_between( Sat ,  Tue )
[ Sat ,  Sun ,  Mon ,  Tue ]
问题回答

How about (in pseudo Code):

weekday[] = {"Mon" .. "Sun"}
for(i = wkday_start; (i % 7) != wkday_end; i = (i+1) % 7)
    printf("%s ", weekday[i]);

它像循环缓冲,花一天——开始成为从(以0为基础)开始的指数,总天数——最终指数。

希望这一帮助

George。

您的国名清单使用日历模块:

import calendar

def intervening_days(day1, day2):
    weektest = list(calendar.day_name)*2
    d1 = weektest.index(day1)
    d2 = weektest.index(day2,d1+1)
    return weektest[d1:d2+1]

print intervening_days("Monday","Sunday")
print intervening_days("Monday","Tuesday")
print intervening_days("Thursday","Tuesday")
print intervening_days("Monday","Monday")

印刷:

[ Monday ,  Tuesday ,  Wednesday ,  Thursday ,  Friday ,  Saturday ,  Sunday ]
[ Monday ,  Tuesday ]
[ Thursday ,  Friday ,  Saturday ,  Sunday ,  Monday ,  Tuesday ]
[ Monday ,  Tuesday ,  Wednesday ,  Thursday ,  Friday ,  Saturday ,  Sunday ,  Monday ]

如果你不希望星期一至星期一返回整整整周的天数,则将d2的确定改为d2 = 星期测试.index(day2,d1)

你们要求的是算法,我理解这应该是语言独立的;然而,遵循使用C#和LINQ表述的编码工作:

DayOfWeek start = DayOfWeek.Wednesday;
DayOfWeek end = DayOfWeek.Friday;

IEnumerable<DayOfWeek> interval = 
    Enum.GetValues(typeof(DayOfWeek)).OfType<DayOfWeek>()
        .Where(d => d >= start && d <= end);

Console.WriteLine(
    String.Join(", ", 
        interval.Select(d => d.ToString()).ToArray()));

或许,使用任何语言,你应当将价值归属于每天(Sunday=0等),并寻找与你期望的间隔相符的所有价值。

以下为星期一至星期一的代码。

bool isWeekday(int d) {
    return d >= 1 && d <= 5;
}

int f(int d1, int d2) {
    int res = isWeekday(d1) ? 1 : 0;
    return d1 == d2 ?
           res :
           res + f(d1 % 7 + 1, d2);
}




相关问题
热门标签