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

时间:2018-03-17 05:29:02

标签: python python-3.x

所以我试图接受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循环中保持整齐

4 个答案:

答案 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位数字介于0255之间。