我正在制作一个计算器,将RGB值转换为十六进制数。因为我正在编码,我意识到我已经三次写了相同的代码来检查红色,绿色和蓝色的用户输入。所以我想,为什么不使用函数来检查我的变量!!这是我的代码:
invalid_msg = 'Whoops looks like you have entered incorrect information'
def check_rgb(var):
while var > 255 or var < 0:
print invalid_msg
var = int(raw_input('Please enter a value between 0 and 255:'))
return var
def rgb_hex():
red = int(raw_input('Enter your value for red.'))
check_rgb(red)
green = int(raw_input('Enter your value for green.'))
while green > 255 or red < 0:
print invalid_msg
green = int(raw_input('Enter your value for green.'))
blue = int(raw_input('Enter your value for blue.'))
while blue > 255 or red < 0:
print invalid_msg
blue = int(raw_input('Enter your value for blue.'))
val = (red << 16) + (green << 8) + blue
print '%s' % (hex(val)[2:]).upper()
rgb_hex()
问题在于重新声明变量。现在,它将输入到函数中的值存储到变量'var'而不是红色。
答案 0 :(得分:2)
你需要做类似
之类的事情red = check_rgb(red)
当你做的时候
check_rgb(red)
不使用返回值。
答案 1 :(得分:0)
您可以检查分别调用该函数的三种颜色的条件,然后在同一语句中对它们进行比较:
red_ok = check_rgb(red)
green_ok = check_rgb(green)
blue_ok = check_rgb(blue)
if (red_ok and green_ok and blue_ok) :
val = (red << 16) + (green << 8) + blue
print '%s' % (hex(val)[2:]).upper()
答案 2 :(得分:0)
正如Davis Yoshida所提到的那样,仅仅执行check_rgb(red)
并不会更改red
的原始值,因为您忘记保存check_rgb
返回的值。
我建议扩展您的帮助程序功能,以便它获取用户输入并验证它。这是一个示例,它还确保输入是适当范围内的有效整数。此代码还显示了一种更简单的方法来打印RGB值的十六进制表示。
def get_color_byte(name):
while True:
s = raw_input('Enter a value from 0 to 255 for %s: ' % name)
try:
v = int(s)
if not 0 <= v <= 255:
raise ValueError('Out of range')
return v
except ValueError as e:
print e
r, g, b = [get_color_byte(name) for name in ('red', 'green', 'blue')]
rgb = (r << 16) | (g << 8 ) | b
print '%06X' % rgb
<强>测试强>
Enter a value from 0 to 255 for red: hello
invalid literal for int() with base 10: 'hello'
Enter a value from 0 to 255 for red: 12.5
invalid literal for int() with base 10: '12.5'
Enter a value from 0 to 255 for red: -5
Out of range
Enter a value from 0 to 255 for red: 300
Out of range
Enter a value from 0 to 255 for red: 240
Enter a value from 0 to 255 for green: 13
Enter a value from 0 to 255 for blue: 7
F00D07
作为print '%06X' % rgb
的替代方案,您可以使用更现代的format
函数:
print format(rgb, '06X')
在这两者中,大写X
表示在十六进制字符串中使用大写字母。