Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数字限制在一定范围内_Python - Fatal编程技术网

Python 将数字限制在一定范围内

Python 将数字限制在一定范围内,python,Python,现在,我已经有了将R、G和B颜色值转换为十六进制的代码 但是,如果用户输入无效数字(例如-20),它将返回一个完全随机的数字 我的代码是: def rgb(r, g, b): if r < 0: r = 0 elif r > 255: r = 255 if g < 0: g = 0 elif g > 255: g = 255 if b < 0: b

现在,我已经有了将R、G和B颜色值转换为十六进制的代码

但是,如果用户输入无效数字(例如-20),它将返回一个完全随机的数字

我的代码是:

def rgb(r, g, b):
    if r < 0:
        r = 0
    elif r > 255:
        r = 255
    if g < 0:
        g = 0
    elif g > 255:
        g = 255
    if b < 0:
        b = 0
    elif b > 255:
        b = 255
    return '%02x%02x%02x'.upper() % (r,g,b)
def rgb(r,g,b):
如果r<0:
r=0
如果r>255:
r=255
如果g<0:
g=0
elif g>255:
g=255
如果b<0:
b=0
如果b>255:
b=255
返回“%02x%02x%02x”。上限()%(r,g,b)
但是,我不想把所有的if/elif语句都放进去,因为它们占用了太多的空间。是否可以执行类似r.range(0255)的操作将无效数字更改为最接近的数字?例如,-20将更改为0,300将更改为255


任何帮助都将不胜感激。

我认为大多数人使用的成语对于某些
值来说是这样的:

maxValue = 255
minValue = 0

min(maxValue, max(minValue, value))

我认为大多数人对某些
value
的习语是这样的:

maxValue = 255
minValue = 0

min(maxValue, max(minValue, value))

如果您想对它感兴趣,这很好:

r, g, b = (min(255, max(0, c)) for c in (r, g, b))
例如:

In [1]: r, g, b = -1, 145, 289

In [2]: r, g, b = (min(255, max(0, c)) for c in (r, g, b))

In [3]: r, g, b
Out[3]: (0, 145, 255)

如果您想对它感兴趣,这很好:

r, g, b = (min(255, max(0, c)) for c in (r, g, b))
例如:

In [1]: r, g, b = -1, 145, 289

In [2]: r, g, b = (min(255, max(0, c)) for c in (r, g, b))

In [3]: r, g, b
Out[3]: (0, 145, 255)

如果您的值总是打包为“列表类”结构(例如元组、列表、NUMPY数组),那么考虑使用NUMPY的“代码>剪辑< /代码>函数。然后,在下面的示例中,可以避免将值解包到变量r、g和b中

#!/usr/bin/env python


import numpy as np


def clip(r, g, b, min_val=0, max_val=255):
    return tuple(np.clip((r, g, b), min_val, max_val))


def main():
    x = clip(-20, 1, 256)
    print(x)

    x = clip(0, 300, -1)
    print(x)

    x = clip(1, 100, 255)
    print(x)

    y = (-20, 1, 256)
    y = clip(*y)  # Unpack y into r, g, b, if you like
    print(y)


if __name__ == '__main__':
    main()
输出:

(0, 1, 255)
(0, 255, 0)
(1, 100, 255)
(0, 1, 255)

如果您的值总是打包为“列表类”结构(例如元组、列表、NUMPY数组),那么考虑使用NUMPY的“代码>剪辑< /代码>函数。然后,在下面的示例中,可以避免将值解包到变量r、g和b中

#!/usr/bin/env python


import numpy as np


def clip(r, g, b, min_val=0, max_val=255):
    return tuple(np.clip((r, g, b), min_val, max_val))


def main():
    x = clip(-20, 1, 256)
    print(x)

    x = clip(0, 300, -1)
    print(x)

    x = clip(1, 100, 255)
    print(x)

    y = (-20, 1, 256)
    y = clip(*y)  # Unpack y into r, g, b, if you like
    print(y)


if __name__ == '__main__':
    main()
输出:

(0, 1, 255)
(0, 255, 0)
(1, 100, 255)
(0, 1, 255)

第一个代码示例的可能副本的可能副本的最大值和最小值已反转<代码>[max(255,min(0,c)],对于c in(-10300150)]
返回
[255,255,255]
您的第一个代码示例的最大值与最小值相反
[max(255,min(0,c))for c in(-10300150)]
返回
[255,255,255]
恐怕您的代码掩盖了默认值
max
min
Ha!是的,这些变量名的选择非常糟糕。已编辑。恐怕您的代码屏蔽了默认的
max
min
Ha!是的,这些变量名的选择非常糟糕。编辑。