2016-10-02 14 views
0

文字列を読み込もうとしています(空白なし)、大文字の小文字が両側に3つの大文字(HHSkSIO)で囲まれたインスタンスを引き出します。各ウィンドウ内の文字があるかどうかを最初の関数ウィンドウは声明のため、私は7のスライディングウィンドウと第二の部分を使用して文字列を反復処理することができますforループ内でネストされたifステートメントを使用しています

def window(fseq, window_size=7): 
    for i in xrange(len(fseq) - window_size + 1): 
     yield fseq[i:i+window_size] 


for seq in window('asjdjdfkjdhfkdjhsdfkjsdHJJnJSSsdjkdsad', 7): 
    if seq[0].isupper and seq[1].isupper and seq[2].isupper and seq[3].islower and seq[4].isupper and seq[5].isupper and seq[6].isupper: 
      print seq 

、チェック:私は以下のコードを書いていますより高い、より高い、より高い、より高い、高い。私は、コードを実行すると、それがで出てくる:

asjdjdf 
sjdjdfk 
jdjdfkj 
djdfkjd 
jdfkjdh 
dfkjdhf 
fkjdhfk 
kjdhfkd 
jdhfkdj 
dhfkdjh 
hfkdjhs 
fkdjhsd 
kdjhsdf 
djhsdfk 
jhsdfkj 
hsdfkjs 
sdfkjsd 
dfkjsdH 
fkjsdHJ 
kjsdHJJ 
jsdHJJn 
sdHJJnJ 
dHJJnJs 
HJJnJsd 
JJnJsdj 
JnJsdjk 
nJsdjkd 
Jsdjkds 
sdjkdsa 
djkdsad 

どのように私は、ステートメントif文ではなく、それらのすべてをプリントアウトするよりも、上記に準拠スライディング窓の外だけ印刷のために作ることができますか? P.S私はこれがおそらくそれを行うの非常にclunkyな方法であることを知って、私は初心者であり、私が考えることができる唯一のものでした!

+0

'配列[0] .isupper'、残りは実際の関数を呼び出すことはありません。メソッドオブジェクトは "真実"なので、条件は常にTrueです。文字列中の全ての文字が大文字であれば、 'str.isupper'が' True'を返すという事実を利用することもできます。 –

+0

ああ、そうです:もしseq [0] == Trueなら? – sahwahn

+0

いいえ、メソッドを呼び出す必要があります。たとえば、 'seq [:3] .isupper()'は最初の2文字が大文字であるかどうかを調べます。一般的に、Pythonでは 'something == True'を決して実行しません。単に何かをテストするだけです。 –

答えて

1

あなたはisupperislowerメソッドを呼び出す必要があります:問題はあなたが常にtrueに評価され、.isupperためにあなたの呼び出しで()が欠けていることである

if seq[:3].isupper() and seq[3].islower() and seq[4:].isupper(): 
     print seq 
1

を。

試してみてください。

def window(fseq, window_size=7): 
    for i in range(len(fseq) - window_size + 1): 
     yield fseq[i:i+window_size] 


for seq in window('asjdjdfkjdhfkdjhsdfkjsdHJJnJSSsdjkdsad', 7): 
    if seq[0].isupper() and seq[1].isupper() and seq[2].isupper() and seq[3].islower() and seq[4].isupper() and seq[5].isupper() and seq[6].isupper(): 
     print (seq) 

それを行うための他の方法で、次のようになります。

import re 
s = re.compile(r'[A-Z]{3}[a-z][A-Z]{3}') 
def window(fseq, window_size=7): 
    for i in range(len(fseq) - window_size + 1): 
     yield fseq[i:i+window_size] 

for seq in window('asjdjdfkjdhfkdjhsdfkjsdHJJnJSSsdjkdsad', 7): 
    result = s.search(seq) 
    if result is not None: 
     print(result.group()) 
+0

素晴らしい作品です、ありがとう! – sahwahn

+0

ようこそ。 – Nf4r

関連する問題