#完整代码
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')