Python 将数字限制在一定范围内
现在,我已经有了将R、G和B颜色值转换为十六进制的代码 但是,如果用户输入无效数字(例如-20),它将返回一个完全随机的数字 我的代码是: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
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!是的,这些变量名的选择非常糟糕。编辑。