Python 函数检查变量并对其进行更改

Python 函数检查变量并对其进行更改,python,python-2.7,Python,Python 2.7,我正在制作一个计算器,将RGB值转换成十六进制数。在编写代码时,我意识到我已经编写了三次相同的代码来检查用户输入的红色、绿色和蓝色。所以我想,为什么不使用一个函数来检查我的变量呢!!这是我的密码: invalid_msg = 'Whoops looks like you have entered incorrect information' def check_rgb(var): while var > 255 or var < 0: print invali

我正在制作一个计算器,将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()
invalid_msg='哎呀,你好像输入了不正确的信息'
def检查_rgb(var):
当var>255或var<0时:
打印无效消息
var=int(原始输入('请输入一个介于0和255之间的值:'))
返回值
def rgb_hex():
红色=整数(原始输入('输入红色的值'))
检查rgb(红色)
绿色=整数(原始输入('输入绿色值'))
当绿色>255或红色<0时:
打印无效消息
绿色=整数(原始输入('输入绿色值'))
blue=int(原始输入(“输入蓝色的值”))
蓝色>255或红色<0时:
打印无效消息
blue=int(原始输入(“输入蓝色的值”))

val=(红色你需要做一些类似

red = check_rgb(red)
当你这么做的时候

check_rgb(red)

不使用返回值。

您可以检查单独调用函数的三种颜色的条件,然后在同一语句中比较所有颜色:

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()
red\u ok=check\u rgb(红色)
绿色\正常=检查\ rgb(绿色)
蓝色\u正常=检查\u rgb(蓝色)
如果(红色、绿色和蓝色):

val=(红色正如Davis Yoshida提到的,仅仅执行
check_rgb(红色)
不会更改
red
的原始值,因为您忘记保存
check_rgb
返回的值

我建议扩展helper函数,以便它获取用户输入并对其进行验证。下面的示例还可以确保输入是正确范围内的有效整数。此代码还显示了打印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
作为
打印“%06X”%rgb
的替代方法,您可以使用更现代的
格式
功能:

print format(rgb, '06X')

在这两种情况下,大写字母
X
表示在十六进制字符串中使用大写字母。

将问题中的代码粘贴到pastebin中,而不是在iframe中。这非常棒,但是为什么不在变量定义s中包含int的调用?哦,我明白了!如果用户输入了无法转换为整数的内容,那么l可能是一个错误。因此在try:中重新定义变量允许我们排除错误!…为什么不将整个var声明移动到try语句中?@Joe一般规则是最小化
try
块中的代码。这样,您只捕获您想要捕获的错误,并且知道如何处理。如果其他意外错误rs出现时,通常表示程序逻辑中存在问题,当出现这种情况时,您希望程序以响亮的声音失败,并打印错误回溯,以提供帮助您修复代码的信息。@Joe(续)在这种特殊情况下,内置的
raw_input
函数永远不会引发异常,除非用户中断程序(例如,使用Ctrl-C)。如果发生这种情况,我们不想纠缠用户要求更多输入,我们希望程序终止,但如果您希望,您可以捕获
键盘中断
异常,以便在退出前执行操作,例如打印“再见”消息。