所以我试图接受RGB颜色值的输入,这意味着它们必须是0-255之间的整数,例如:
123245230
但是我想确保它们已经正确格式化了,所以我将输入作为字符串并且我试图强制它进入列表。 我最初的解决方案是
colorList=colorListString.split(",") for i in range(3): colorList[i]=int(colorList[i]) colorMatrix+=[colorList]
但是这并不能确保总有3个值,所以我把它复杂化,首先要确保输入是用
确定的3个值while colorListString.count(",") !=2: print("Color number ",x+1,": ") colorListString=input()
但现在我遇到的问题是我不知道如何确保这三个值确实是整数,并在while循环中保持整齐
答案 0 :(得分:2)
正则表达式应该有所帮助。
import re
s = "123,245,230"
if re.match("^\d{3},\d{3},\d{3}$", s):
#process
答案 1 :(得分:0)
我不清楚你想用while循环做什么。
您还可以检查该值是否为有效的rgb值,如下所示:
colorListString = '123,245,230'
colorMatrix = []
colorList =colorListString.split(",")
if len(colorList)==3:
for i in range(3):
val = int(colorList[i])
if val <= 255 and val >= 0:
colorList[i] = val
colorMatrix +=[colorList]
print(colorMatrix)
答案 2 :(得分:0)
如果你试图强制抛出异常,如果他们输入3个以上的数字,有几种方法可以做到:
>>> colorListString = '255, 255, 255, 255'
>>> # Unpacking
>>> r, g, b = colorListString.split(",")
ValueError: too many values to unpack (expected 3)
>>> # maxsplit argument to split
>>> colorList = colorListString.split(",", 2)
>>> for i in range(3): colorList[i]=int(colorList[i])
ValueError: invalid literal for int() with base 10: ' 255, 255'
>>> # Just check it manually
>>> colorList = colorListString.split(",")
>>> if len(colorList != 3) raise ValueError('RGB please')
ValueError: RGB please
无需获得任何爱好者,例如在分割前使用逗号或使用正则表达式计算逗号。
答案 3 :(得分:0)
没有regex
的简单 1-liner :
s = "123,245,230"
if all(x <= 3 for x in [len(i) if int(i) >= 0 and int(i) <= 255 else 4 for i in s.split(',')]):
# process
这适用于2,123,220
等字符串。您不需要使用002,123,220
。
另请注意,以逗号分隔的字符串中的3位数字介于0
和255
之间。