2
x = WAIT100MS
subroutines = ["WAIT"+str(range(1,256))+"MS"]
if x in subroutines:
    print "success"
else:
    print "invalid"

我正在尝试创建一段代码,其中 ifWAITXMS介于1and之间255,它将被接受,否则不会。range() 函数只生成一个列表,所以我想我可以使用

" ".join("WAIT"+str(range(1,256))+"MS"),

最后得到一个字符串,如x. 但是,使用join()with 函数range()似乎不像我期望的那样工作,而是给了我一个正常的列表,如"WAIT[1,2,3,4,...]MS". 我应该怎么办?

4

3 回答 3

5

我想你想要这样的东西:

''.join("WAIT%dMS"%i for i in range(1,256))

这是我认为更好的方法:

def accept_string(s):
    try:
        i = int(s[4:-2])
    except ValueError:
        return False
    return s.startswith('WAIT') and s.endswith('MS') and (1 <= i < 256)
于 2013-01-03T19:48:26.433 回答
3

我会做类似的事情:

x = "WAIT100MS"
m = re.match(r"WAIT(\d+)MS$", x)
accept = m is not None and 1 <= int(m.group(1)) <= 255

我认为迭代所有可接受的数字(更不用说构建和存储所有WAIT<n>MS字符串)是不必要的浪费。

于 2013-01-03T19:50:57.760 回答
1

当你可以切片时,为什么要重新?

x = 'WAIT100MS'
n = int(x[4:-2])
if 1 < n < 256:
    print 'success'
else:
    print 'invalid'
于 2013-01-03T20:00:36.197 回答