繁体   English   中英

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

[英]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位数字在0255之间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM