2017-01-26 4 views
0

EDIT:Pythonで.readline()が返すものは何ですか?問題をより明確にするために全体のポストの

s = "GATATATGCATATACTT" 
t = "ATAT" 

for i in range(len(s)): 
    if t == s[i:i+len(t)]: 
     print i+1, 

したがって、上記のプログラムの目的は、DNAの短い線とDNAの長いライン(S)(をスキャンすることですt)、s上のどの位置にtが一致するかを見つける。上記のコードの出力は次のとおりです。

2 4 10#これは基本的に、文字列tが一致する文字列のインデックス番号です。上記のコードで見られるように、1を基にしたナンバリング出力を与えるのはi + 1です。

問題は、コードを変更しようとすると、ファイルを使ってsとtの値を受け取れるようにするために、readline()関数が動作していないということです。 motif.txtファイルには、各行に1つずつ、DNAの2つの文字列が含まれています。

with open('txt/motif.txt', 'r') as f: 

    s = f.readline() 
    t = f.readline() 

    for i in range(len(s)): 
     if t == s[i:i+len(t)]: 
      print i+1, 

このコードでは、何も出力されません。しかし、私がtに変更したとき:

t = f.readline().strip() 

そして、プログラムは最初の例と同じ結果を出力します。

だから私はこのことがより明確になることを願っています。私の質問は、readline()が文字列を返す場合、最初の例と同じように、例2のプログラムが動作しないのはなぜですか?

+4

あなたのコードは本当にインデントされていますか?ここにあなたが持っているものは無効です。 – chepner

+6

あなたの入力が何であるか( 'txt/motfi.txt'の内容)と、期待される出力が何かを示す必要もあります。 – chepner

+3

そして、 'readline'は、指定されたファイルオブジェクトから利用可能な次のテキスト行を返します。 – chepner

答えて

0

問題文が間違っていると、またはtには2番目の例より多くのコンテンツ(およびlen(s) > 0またはlen(t) > 0)が含まれていません。基本的に

s = f.readline() 

そしてs"foobar \n"のような文字列が含まれていますので、len(s)9になります。その後

:同じ文字列で

s = f.readline().strip() 

取り除いた文字列が"foobar"あるので、len(s)6になります。

s = " \n"のような空白がいっぱいの場合、のs.strip()len(s) == 0となります。

この場合、ループは開始せず、何も印刷されません。

私が考えることができるほとんどすべてのケースでは、あなたは黙想の出口ではなく、執行を得なければなりません。

しかし、正直言って、あなたのコードは読んでから(6ヶ月であなたを含む)何をしたいのか分からないので、コードは悪いです。

+0

答えをありがとう。しかし、私はあなたが誤解しているかもしれないと思う、最初の例は2番目の例よりも少ないコンテンツを持っています。したがって、2番目の例だけが動作します。私はポストの最後に追加した追加の説明がもっと説明してくれることを願っています:) – AltoBalto

関連する問題