RGB色值转换为整数值 | 豆包MarsCode AI刷题

52 阅读3分钟

问题描述

小M需要一个函数,用于将RGB颜色值转换为相应的十六进制整数值。RGB色值以字符串的形式给出,如"rgb(192, 192, 192)",需要转换为对应的整数值。

输入:rgb = "rgb(192, 192, 192)"

输出:12632256

输入:rgb = "rgb(100, 0, 252)"

输出:6553852

输入:rgb = "rgb(33, 44, 55)"

输出:2174007

输入:rgb = "rgb(255, 255, 255)"

输出:16777215

输入:rgb = "rgb(0, 0, 0)"

输出:0

分析

第一次刷这道题时,并不理解将RGB颜色值转换为相应的十六进制整数值这句话是什么意思,并不清楚是怎么一个过程。询问MarsCode AI,帮助我们理解一下题目。

屏幕截图 2024-11-26 214023.png

image.png

到这里,我们就对这个题目有了更清晰的认识。那么,我们可以分为4步来处理这个问题。

1.使用正则表达式从字符串中提取出R、G、B的数值。

2.将每个数值转换为两位的十六进制字符串。

3.将三个十六进制字符串拼接成一个完整的十六进制字符串。

4.将拼接后的十六进制字符串转换为整数。

首先导入re模块,使用re.findall(r"\d+",RGB)获取数值,并以列表形式返回,其中r"\d+"用来匹配数字。

import re
def find_num(RGB: str):
     return re.findall(r"\d+",RGB)

接着,定义两个进制转换的函数。

def change_10_to_16(a: int):
    return hex(a)[2:]

因为hex()返回的是带有前缀的结果,所以我们用[2:]来舍去前缀。

def change_16_to_10(a: int):
    return int(a, 16)

然后我们来调用以上函数。

def solution(rgb):
    num_list = find_num(rgb)
    string = ""
    for i in num_list:
        string += change_10_to_16(int(i))
    return change_16_to_10(string)

定义一个空字符串string,遍历我们获得的数值列表,将转换后的结果拼接成在一起,在将其转为十进制整数。注意变量类型。

然后我们加上测试代码,运行一下。

import re
def find_num(RGB: str):
     return re.findall(r"\d+",RGB)
   
def change_10_to_16(a: int):
    return hex(a)[2:] 

def change_16_to_10(a: int):
    return int(a, 16)
def solution(rgb):
    num_list = find_num(rgb)
    string = ""
    for i in num_list:
        string += change_10_to_16(int(i))
    return change_16_to_10(string)

if __name__ == "__main__":
    print(solution("rgb(192, 192, 192)") == 12632256 )
    print(solution("rgb(100, 0, 252)") == 6553852)
    print(solution("rgb(33, 44, 55)") == 2174007)

print(solution("rgb(100, 0, 252)") == 6553852)
输出false

检查一下,我们会发现其中有一项数值是0,只有一位,那么很可能是hex(a)[2:]出了问题。 询问MarsCode AI

image.png

所以我们要控制结果形式,使用return format(a, '02x')

image.png 使用格式化输出就解决了这个问题。

总结

在实际解决问题时,要严格注意变量类型、长度,使用format获取理想输出形式。