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

2024-09-28 22:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试接受RGB颜色值的输入,这意味着它们必须是0-255之间的整数,例如:

123,245,230

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

    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循环中


Tags: 字符串in列表for颜色range整数rgb
3条回答

如果您试图在输入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

不需要任何花哨的东西,比如在分割前数逗号或者使用正则表达式

我不清楚你想用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)

正则表达式应该有帮助

import re
s = "123,245,230"

if re.match("^\d{3},\d{3},\d{3}$", s):
    #process

相关问题 更多 >