список цветов между несколькими цветами в питоне - PullRequest
0 голосов
/ 17 января 2019

Для моего проекта мне нужно показать значение переменной от минимума до максимума, используя определенное пользователем количество цветов. эта пользовательская переменная (numberOfLevels) умножается на 5 (5,10,15,20,25, ...). хотя это не так просто, потому что окончательная цветовая палитра представляет собой диапазон цветов между несколькими цветами. Итак, у меня есть палитра из 5 исходных цветов, и я хочу преобразовать ее в палитру из 40 цветов, где цвета поровну разделены на 5 исходных цветов.

вот пример исходной цветовой палитры

paletteList = [
[Color("#ff0000"),
Color("#ff8000"),
Color("#ffff00"),
Color("#00ffff"),
Color("#0000ff")],
]

и вот формула, которую я создал для создания окончательной цветовой палитры

numberOfLevels = 40
sizeOfBucket = int(numberOfLevels / 5)

for x in range(0, len(paletteList[0])-1 ):
    templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket+1))
    for m in templist:
    res.append(m)

для удаления повторяющихся цветов

for m in res:
    if m not in templist:
           templist.append(m)

проблема с этим кодом в том, что он показывает 36 цветов, а я спросил 40

1 Ответ

0 голосов
/ 17 января 2019

Проблема в том, что вы используете 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 раз) и range_to следует использовать 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)
...