如何用Python做一个RGB和16进制的互转工具
1、原理:①首先知道RGB如何转成16进制,把R、G、B三个值首先转为16进制,转换后不足2位的用“0”补齐,再把转换后的结果依次连接在一起,前面加上一个“#”就可以了。②16进制转RGB只要把16进制按照相反的步骤转为10进制就可以了。
2、代码整体分为3部分:①定义RGB转16进制函数。②定义16进制转RGB的函数。③询问用户是要进行RGB转16进制还是16进制转RGB,然后根据输入进行函数调用。
3、def rgb_to_hex(): #首先定义一个RGB颜色转16进制的函数 while True: #无限循膣默髻僳环 try: #尝试获取RGB值的输入 r = int(input('请输入RGB中R的数值:')) g = int(input('请输入RGB中G的数值:')) b = int(input('请输入RGB中B的数值:')) if r < 0 or r > 255 or g < 0 or g > 255 or b < 0 or b > 255: #如果RGB的值不在0-255之间,就打印一条提示语 print('RGB请输入0-255之间的整数!\n') #提示语 else: #RGB的值在0-255之间就终止循环 break except ValueError: #如果引发了类型错误也会打印一条提示语 print('RGB请输入0-255之间的整数!\n')
4、 hex_r = hex(r)[2:].upper() #10进制转16进制,并去掉16进制前面的“0x”,再把得出的结果转为大写 hex_g = hex(g)[2:].upper() hex_b = hex(b)[2:].upper() hex_r0 = hex_r.zfill(2) #位数不足2位时补“0” hex_g0 = hex_g.zfill(2) hex_b0 = hex_b.zfill(2) print('16进制:#' + hex_r0 + hex_g0 + hex_b0) #打印最终结果(格式如“#ff0402”)
5、def hex_to_rgb(): #再定义一个16进制转RGB颜色的函数 while True: #无限事恐皇卫循环 hex_color = str(input('请输入16进制颜色:')) #获取16进制颜色的输入 if hex_color[0] != '#' or len(hex_color) != 7: #如果16进制颜色前面没有“#”或16进制字符串的长度不为7,就打印一条提示语 print('请输入标准的16进制颜色,以“#”开头,字符长度为7!\n') else: #如果16进制颜色符合标准 try: #尝试进行16进制转10进制 r = int('0x' + hex_color[1:3],16) #16进制颜色格式如“#ff0402”,提取出其中的“ff”、“04”、“02”三个16进制数字,并在前面加上“0x”,表示16进制 g = int('0x' + hex_color[3:5],16) b = int('0x' + hex_color[5:7],16) break #转换完成就退出循环 except ValueError: #引发了类型错误就打印提示语 print('请输入标准的16进制颜色,以“#”开头,字符长度为7!\n') print('RGB值:' + str(r) + ',' + str(g) + ',' + str(b)) #打印出RGB值,用“,”分开
6、while True: #无限循环 user_in = str(input('请输入你要怎样转换:输入“1”是RGB转16进制,输入“2”是16进制转RGB:')) #提示用户输入“1”或“2” if user_in == '1': #如果用户输入“1”就运行RGB转16进制的函数 rgb_to_hex() break #终止循环 elif user_in == '2': #如果用户输入“2”就运行16进制转RGB的函数 hex_to_rgb() break else: #如果输入其他的内容,就打印一条提示语 print('只能输入“1”或“2”!\n')
7、#完整代码def rgb_to_hex(): #定义一个RGB颜色转16旅邯佤践进制的函数 while True: #无限循环 try: #尝试获取RGB值的输入 r = int(input('请输入RGB中R的数值:')) g = int(input('请输入RGB中G的数值:')) b = int(input('请输入RGB中B的数值:')) if r < 0 or r > 255 or g < 0 or g > 255 or b < 0 or b > 255: #如果RGB的值不在0-255之间,就打印一条提示语 print('RGB请输入0-255之间的整数!\n') #提示语 else: #RGB的值在0-255之间就终止循环 break except ValueError: #如果引发了类型错误也会打印一条提示语 print('RGB请输入0-255之间的整数!\n') hex_r = hex(r)[2:].upper() #10进制转16进制,并去掉16进制前面的“0x”,再把得出的结果转为大写 hex_g = hex(g)[2:].upper() hex_b = hex(b)[2:].upper() hex_r0 = hex_r.zfill(2) #位数不足2位时补“0” hex_g0 = hex_g.zfill(2) hex_b0 = hex_b.zfill(2) print('16进制:#' + hex_r0 + hex_g0 + hex_b0) #打印最终结果(格式如“#ff0402”)def hex_to_rgb(): #再定义一个16进制转RGB颜色的函数 while True: #无限循环 hex_color = str(input('请输入16进制颜色:')) #获取16进制颜色的输入 if hex_color[0] != '#' or len(hex_color) != 7: #如果16进制颜色前面没有“#”或16进制字符串的长度不为7,就打印一条提示语 print('请输入标准的16进制颜色,以“#”开头,字符长度为7!\n') else: #如果16进制颜色符合标准 try: #尝试进行16进制转10进制 r = int('0x' + hex_color[1:3],16) #16进制颜色格式如“#ff0402”,提取出其中的“ff”、“04”、“02”三个16进制数字,并在前面加上“0x”,表示16进制 g = int('0x' + hex_color[3:5],16) b = int('0x' + hex_color[5:7],16) break #转换完成就退出循环 except ValueError: #引发了类型错误就打印提示语 print('请输入标准的16进制颜色,以“#”开头,字符长度为7!\n') print('RGB值:' + str(r) + ',' + str(g) + ',' + str(b)) #打印出RGB值,用“,”分开while True: #无限循环 user_in = str(input('请输入你要怎样转换:输入“1”是RGB转16进制,输入“2”是16进制转RGB:')) #提示用户输入“1”或“2” if user_in == '1': #如果用户输入“1”就运行RGB转16进制的函数 rgb_to_hex() break #终止循环 elif user_in == '2': #如果用户输入“2”就运行16进制转RGB的函数 hex_to_rgb() break else: #如果输入其他的内容,就打印一条提示语 print('只能输入“1”或“2”!\n')