将颜色十六进制值彼此分开的正确方法是什么?

问题描述 投票:0回答:1

我制作了一个小型 Python 程序,通过使用预定义颜色绘制像素(以十六进制值表示,这很重要)来渲染图像。

但是有一个小问题。

我做了一个测试十六进制字符串,列出了所有蓝色值(它看起来像这样:“000000000001000002000003000004...”)

但是当我将这一行插入到我的程序中时,颜色值由于某种原因会跳跃。

其实应该是这样的: (颜色选择器#000000,向下刷,1步,向上刷), (颜色选择器#000001,向下刷,1步,向上刷), (颜色选择器#000002,向下刷,1步,向上刷)等

但是在程序中,由于某种原因,重做了如下: (颜色选择器#000000,向下刷,1步,向上刷), (颜色选择器#000010,向下刷,第1步,向上刷), (颜色选择器#000200,向下刷,1步,向上刷), (颜色选择器#003000,向下刷,1步,向上刷), (颜色选择器#040000,向下刷,1步,向上刷) 等等

可以修复此问题以使程序正常运行吗?

完整程序代码:

import turtle as tur

hexString = input('Введите HEX-строку БЕЗ пробелов: ')

tur.clear()
tur.penup()

startX = -380
startY = 320

tur.goto(startX, startY)

a = 0
hexColors = []
hexColorTemp = ''

for hexColorPart in hexString:
    a += 1

    if a < 7:
        hexColorTemp += hexColorPart
    elif a == 7:
        a = 0
        hexColors.append(hexColorTemp)
        hexColorTemp = ''

for fullColor in hexColors:
    if tur.xcor() < 370:
        print(tur.pos())
        print(fullColor)
        print()
        tur.pencolor('#' + fullColor)
        tur.pendown()
        tur.fd(1)
        tur.penup()
    elif tur.xcor() == 370:
        startY -= 1
        tur.goto(startX, startY)
        print(tur.pos())
        print(fullColor)
        print()
        tur.pencolor('#' + fullColor)
        tur.pendown()
        tur.fd(1)
        tur.penup()

tur.mainloop()

附注在调试程序中,启用当前颜色和画笔位置的显示。

我尝试在 20 行和 22 行代码中写 6 而不是 7,但没有帮助。

python colors hex python-turtle
1个回答
0
投票

问题是,当你到达

a==7
时,你没有做
hexColorTemp += hexColorPart
,所以你错过了当前的
hexColorPart

总是需要追加

hexColorPart
,那么如果长度是6,保存并清除
hexColorTemp

hexColors = []
hexColorTemp = ''
for hexColorPart in hexString:
    hexColorTemp += hexColorPart
    if len(hexColorTemp) == 6:
        hexColors.append(hexColorTemp)
        hexColorTemp = ''

但是获得基于长度的组的最好方法是像这样切片

hexColors = [hexString[i:i + 6] for i in range(0, len(hexString), 6)]
© www.soinside.com 2019 - 2024. All rights reserved.