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

WAITXMSとの間にある場合は1受け入れ255られ、そうでない場合は受け入れられないコードを作成しようとしています。range()関数はリストを生成するだけなので、使用できると思いました

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

のような文字列になりますx。ただし、で関数を使用すると、期待どおりにjoin()機能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 に答える