2017-01-26 36 views
0

EDIT整個後,爲了更清楚的問題:.readline()在Python中返回什麼?

s = "GATATATGCATATACTT" 
t = "ATAT" 

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

所以上面的方案的目的是通過DNA(或多個)與DNA的短行的長行掃描( t),以便找出s上哪些位置,t匹配。上面代碼的輸出是:

2 4 10#這基本上是字符串t匹配的字符串s的索引號。但從上面的代碼可以看出,它是i + 1給出了一個基於1的編號輸出。

我遇到的問題是,當我嘗試更改代碼時,爲了使它通過文件接收s和t的值,readline()函數不適用於我。 motif.txt文件包含兩串DNA,每行一個。

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()返回一個字符串,爲什麼我的程序不像第一個例子那樣工作?

+4

你的代碼是如何真的被縮進的;你在這裏有什麼是無效的。 – chepner

+6

你還需要顯示你的輸入是什麼('txt/motfi.txt'的內容),以及期望的輸出是什麼。 – chepner

+3

是的,'readline'只是返回給定文件對象中可用的下一行文本。 – chepner

回答

0

您的問題說法是錯誤的,也沒有辦法st在第一個例子中更多的內容(和len(s) > 0len(t) > 0)比第二。

基本上與:

s = f.readline() 

然後s將包含一個字符串象"foobar \n",因此len(s)9

然後用:

s = f.readline().strip() 

以相同字符串,len(s)6因爲剝離字符串"foobar"

所以,如果你的線是滿的空間像s = " \n",s.strip()將是空字符串"",與len(s) == 0

然後在那種情況下,你的循環將不會啓動,並且不會打印任何東西。

在我能想到的幾乎所有其他情況下,你應該得到一個提示,而不是無聲的退出。

但說實話,你的代碼是壞的,因爲沒有人能夠理解你想要做什麼,閱讀它(包括你在六個月內)。

+0

感謝您的回答。但我認爲你可能會誤解,第一個例子的內容比第二個例子少。因此只有第二個例子有效。我希望我在帖子末尾添加的額外解釋解釋更多:) – AltoBalto

相關問題