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

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)
阅读 2.1k
2 个回答
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])

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

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))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题