Python 如何将字符串作为整数列表进行测试

Python 如何将字符串作为整数列表进行测试,python,python-3.x,Python,Python 3.x,因此,我尝试接受RGB颜色值的输入,这意味着它们必须是0-255范围内的整数,例如: 123245230 但是我想确保他们已经正确地格式化了它,所以我把输入作为一个字符串,并试图把它强制放到一个列表中。 我最初的解决办法是 但是这并不能确保总是有3个值,所以我把它复杂化了,首先要确保输入是由3个值决定的 但现在我遇到了一个问题,我不知道如何确保这三个值确实是整数,并将其整齐地保留在while循环中,Regex应该会有所帮助 import re s = "123,245,230" if re.m

因此,我尝试接受RGB颜色值的输入,这意味着它们必须是0-255范围内的整数,例如:

123245230

但是我想确保他们已经正确地格式化了它,所以我把输入作为一个字符串,并试图把它强制放到一个列表中。 我最初的解决办法是

但是这并不能确保总是有3个值,所以我把它复杂化了,首先要确保输入是由3个值决定的

但现在我遇到了一个问题,我不知道如何确保这三个值确实是整数,并将其整齐地保留在while循环中,Regex应该会有所帮助

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)
colorListString='123245230'
colorMatrix=[]
colorList=colorListString.split(“,”)
如果len(colorList)==3:
对于范围(3)中的i:
val=int(颜色列表[i])
如果val=0:
颜色列表[i]=val
colorMatrix+=[colorList]
打印(彩色矩阵)

如果您试图在异常输入超过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
不需要任何幻想,比如在拆分前计算逗号或使用正则表达式。

Simple1-liner不带
regex

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
s=“123245230”

如果全部(x=0和int(i)我知道我可以使用String.isNumeric,但我最大的问题是在代码没有变大的情况下包含它,对于一个看似简单的问题,你可能也希望这些值在某个范围内?是的,在0到255之间,刚刚编辑了原始帖子以澄清While循环只是我这么说的“如果它不是正确的输入,请再次询问”唯一的问题是它要求数字长度为3位,因此像2这样的输入必须写为002,除非有解决方法?然后可以使用\d{2,3}有没有办法用这种方式用正则表达式指定介于0和255之间的数值?好吧,我不一定想要异常,我只是想让它重复输入,错误消息只是一种奖励,但不是required@YSquaredYobozo那么,在
if
之后,您可以更改最后一个,以执行任何您想执行的操作,以及其他操作,你可以用
换行符尝试
/
来处理异常,但这并没有指定输入必须在0到255Aww之间,错过了那个。我已经更新了答案。这是一个快速的技巧,但有效。
>>> 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
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