Форматиране на низове за шестнадесетични цветове в Python

Модифицирах функция от PHP, за да връща цветен градиент (http://www.herethere.net/~samson/php/color_gradient/color_gradient_generator.php.txt). Имам проблеми при връщане на цветни шестнадесетични кодове, завършващи на 0s. Това е функцията:

def _get_color(current_step=0, start='000000', end='ffffff', max_steps=16):
    '''
        Returns the color code for current_step between start and end
    '''
    start = '{0:#x}'.format(int(start, 16))
    end = '{0:#x}'.format(int(end, 16))

    if int(max_steps) > 0 & int(max_steps) < 256:
        max_steps = max_steps
    else:
       max_steps = 16

    r0 = (int(start, 16) & 0xff0000) >> 16
    g0 = (int(start, 16) & 0x00ff00) >> 8
    b0 = (int(start, 16) & 0x0000ff) >> 0

    r1 = (int(end, 16) & 0xff0000) >> 16
    g1 = (int(end, 16) & 0x00ff00) >> 8
    b1 = (int(end, 16) & 0x0000ff) >> 0

    if r0 < r1:
        r = int(((r1-r0)*(float(current_step)/float(max_steps)))+r0)
    else:
        r = int(((r0-r1)*(1-(float(current_step)/float(max_steps))))+r1)

    if g0 < g1:
        g = int(((g1-g0)*(float(current_step)/float(max_steps)))+g0)
    else:
        g = int(((g0-g1)*(1-(float(current_step)/float(max_steps))))+g1)

    if b0 < b1:
        b = int(((b1-b0)*(float(current_step)/float(max_steps)))+b0)
    else:
        b = int(((b0-b1)*(1-(float(current_step)/float(max_steps))))+b1)

    return '{0:#x}'.format(((((r << 8) | g) << 8) | b))

Когато стартирам цикъл, гледащ #000000, който е черен, връщам само 0. Във втория код, f0f0f, също липсва 0.

for i in range(0, 16):
    print _get_color(current_step=i, start='000000', end='ffffff', max_steps=16)

0
f0f0f
1f1f1f
2f2f2f
3f3f3f
4f4f4f
5f5f5f
6f6f6f
7f7f7f
8f8f8f
9f9f9f
afafaf
bfbfbf
cfcfcf
dfdfdf
efefef

Обърнете внимание на първите два шестнадесетични кода. Някакви мисли за това как да форматирате правилно върнатата стойност, за да върнете 000000?


person Jason Strimpel    schedule 05.07.2011    source източник