Python关于十进制值转十六进制的题

发布于 2022-09-13 00:38:27 字数 943 浏览 14 评论 0

rgb 功能不完整。完成它,以便传入 RGB 十进制值将导致返回十六进制表示。
RGB 的有效十进制值为 0 - 255。
任何超出该范围的值都必须四舍五入为最接近的有效值。
注意:您的答案应始终为 6 个字符长,3 的速记在这里不起作用
以下是预期输出值的示例:
rgb(255, 255, 255) # returns FFFFFF
rgb(255, 255, 300) # returns FFFFFF
rgb(0,0,0) # returns 000000
rgb(148, 0, 211) # returns 9400D3

#自己写了一个,但是有一点问题,请在此基础上改一下
#或者更好的解决办法也行
def rgb(r, g, b):
    rr = str(hex(r))[2:].upper()
    gg = str(hex(g))[2:].upper()
    bb = str(hex(b))[2:].upper()
    for i in [rr,gg,bb]:
        if '0' in i:
            try:
                if int(i):
                    return '{:02}{:02}{:02}'.format(int(rr),int(gg),int(bb))
            except:
                return '{}{}{}'.format(rr,gg,bb)
        else:
            return '{}{}{}'.format(rr, gg, bb)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

机场等船 2022-09-20 00:38:27
def rgb(r,g,b):
    #一些判断和数学代码,确保参数都是整数
    l=[min(max(x,0),255) for x in [r,g,b]]
    return "".join(["{:0>2X}".format(x) for x in l])
青巷忧颜 2022-09-20 00:38:27

你明显没有处理值超出范围,和不为整数的情况啊。

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass
    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass
    return False
def n2h(x):
    # 如果能确定输入肯定是有效数值,则下面的2句容错处理可以不要,相应的函数定义也可以不要。
    if( not is_number(x) ):
        x=0
    x=round(x)
    x=min( max(x,0) , 255)
    return "{:0>2X}".format(x)
 
def rgb(r, g, b):
    return (n2h(r)+n2h(g)+n2h(b))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文