问题描述
小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,帮助我们理解一下题目。
到这里,我们就对这个题目有了更清晰的认识。那么,我们可以分为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,
所以我们要控制结果形式,使用return format(a, '02x')
使用格式化输出就解决了这个问题。
总结
在实际解决问题时,要严格注意变量类型、长度,使用format获取理想输出形式。