Проблема в том, что вы используете sizeOfBucket+1
, который равен 8 + 1 = 9, и вы используете range()
от 0 до 5-1, что означает диапазон (0, 4), который будет работать 4 раза, поэтому у вас есть 9 * 4 = 36 баллов.
Вместо этого вам нужно сделать следующее, чтобы получить 40 цветов: Запустите range
как range(0, len(paletteList[0]))
, что означает range(0, 5)
(0, 1, 2, 3, 4, всего 5 раз) и [117 ] следует использовать sizeOfBucket
, то есть 8. Так что теперь у вас будет 8 * 5 = 40 цветов.
numberOfLevels = 40
sizeOfBucket = int(numberOfLevels / 4)
for x in range(0, len(paletteList[0])-1 ):
templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket))
for m in templist:
res.append(m)
Редактировать 2
numberOfLevels = 40
sizeOfBucket = int(numberOfLevels / 4)
for x in range(0, len(paletteList[0])-1):
if 0<x<len(paletteList[0])-2:
templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket+1))
else:
templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket))
for m in templist:
res.append(m)
Работы ответа Quassnoi, но вид листов, которыми на рычаге для чистки дат, если они - даты в середине дня (его запуск недели оставляет Вас на один день ранее, чем Вы, необходимо быть то, при использовании времени в середине дня - можно протестировать использование GETDATE ()).
я использовал что-то вроде этого в прошлом:
SELECT
CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL), DATECOL)), 101),
CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL) - 6, DATECOL)), 101)
дополнительная льгота А этого - то, что при помощи @@ DATEFIRST можно обработать нестандартную неделю стартовые дни (значение по умолчанию является воскресеньем, но с НАБОРОМ @@ DATEFIRST можно изменить это).
кажется сумасшедшим, что простое управление датой в SQL Server должно быть этим тайным, но там Вы идете...
SELECT DATECOL - DATEPART(weekday, DATECOL), DATECOL - DATEPART(weekday, DATECOL) + 7
Вы можете установить для @WeekNum и @YearNum все, что захотите - в этом примере они являются производными от переменной @datecol, для которой установлено значение GETDATE () в целях иллюстрации. Когда у вас есть эти значения, вы можете рассчитать диапазон дат для недели, используя следующее:
DECLARE @datecol datetime = GETDATE(); DECLARE @WeekNum INT , @YearNum char(4); SELECT @WeekNum = DATEPART(WK, @datecol) , @YearNum = CAST(DATEPART(YY, @datecol) AS CHAR(4)); -- once you have the @WeekNum and @YearNum set, the following calculates the date range. SELECT DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @YearNum) + (@WeekNum-1), 6) AS StartOfWeek; SELECT DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @YearNum) + (@WeekNum-1), 5) AS EndOfWeek;