[英]How to test a string as a list of integers Python
因此,我尝试接受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循环中
正则表达式应该有所帮助。
import re
s = "123,245,230"
if re.match("^\d{3},\d{3},\d{3}$", s):
#process
我不清楚您要使用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)
如果您试图强迫异常输入超过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
无需花哨的钱,例如在分割之前计算逗号或使用正则表达式。
没有regex
简单1线 :
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
之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.