お客様の要求に応える 3 つのソリューション:
for ループを使用してみましたが、恥ずかしいことに機能しません。カウント変数に追加する特定のパターンを文字列から取得する方法はありますか? この方法を学べば、この練習の他のパターンを見つけることができると確信しています。
.
ソリューション 1
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
def explore(X):
it = iter(X)
prec = it.next()
print 'prec ch1 next next'
for ch in it:
print ' %r %r' % (prec,ch),
if (prec,ch)==('x','o'):
prec = it.next()
print ' %r' % prec,
if prec=='o':
prec = it.next()
if prec =='x':
print ' %r OK !!' % prec
yield 1
else:
print ' %r not good' % prec
else:
print ' stop'
else:
print
prec = ch
print sum(explore(line))
結果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
prec ch1 next next
'B' 'x'
'x' 'o' 'o' 'x' OK !!
'x' 'x'
'x' 'x'
'x' ' '
' ' 'x'
'x' 'o' 'o' 'x' OK !!
'x' ' '
' ' ' '
' ' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' 'o' 'x' stop
'x' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' 'o' 'x' stop
'x' 'x'
'x' 'x'
'x' 'o' 'x' stop
'x' '#'
'#' 'x'
'x' 'o' 'o' 'o' not good
'o' 'x'
'x' 'x'
'x' 'o' 'o' 'x' OK !!
3
ソリューション 2
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
def expl(X):
it4 = iter(X)
it4.next();it4.next();it4.next()
it3 = iter(X)
it3.next();it3.next()
it2 = iter(X)
it2.next()
it1 = iter(X)
for a in it4:
if (it1.next(),it2.next(),it3.next(),a)==('x','o','o','x'):
yield 1
print sum(expl(line))
結果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
3
ソリューション 3
line = "Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox"
print line,'\n'
import re
reg = re.compile('(?<=x)oox')
print len(reg.findall(line))
結果
Bxooxxx xoox xxoxoxxxoxoxxxox#xoooxxoox
3
.
だから、イテレータとジェネレータに考えてください