2014-09-18 31 views
0

我試圖在compareDNA(計算漢明距離)中比較標記爲「S」的兩個輸出。雖然,我無法弄清楚如何從一個def調用一個整數到另一個。我試過返回變量,但是,我無法在返回後調用它(在另一個def中)。 我試圖看看「比較DNA(Udnalin,Mdnalin)和比較DNA(Udnalin,Hdnalin)」的哪個輸出更高,以確定哪個輸出具有更大的漢明距離。 如何從一個def調用一個整數到另一個?在Python中將整數從一個def傳遞到另一個def

import sys 
def main(): 
    var() 

def var(): 
    Mdna = open("mouseDNA.txt", "r") 
    Mdnalin = Mdna.readline() 

    print(Mdnalin) 
    Mdna.close 

    Hdna = open("humanDNA.txt", "r") 
    Hdnalin = Hdna.readline() 
    print(Hdnalin) 
    Hdna.close 

    Udna = open("unknownDNA.txt", "r") 
    Udnalin = Udna.readline() 
    print(Udnalin) 
    Udna.close 
    S = 0 
    S1 = 0 
    S2 = 0 
    print("Udnalin + Mdnalin") 
    compareDNA(Udnalin, Mdnalin) 
    S1 = S 
    print("Udnalin + Hdnalin") 
    compareDNA(Udnalin, Hdnalin) 



def compareDNA(i, j): 
    diffs = 0 
    length = len(i) 
    for x in range(length): 
     if i[x] != j[x]: 
      diffs += 1 
    S = length - diffs/length 
    S = round(S, 2) 
    return S 


    # print("Mouse") 

    # print("Human") 

    # print("RATMA- *cough* undetermined") 

main() 

回答

0

你可能想通過分配給每個呼叫在var功能恢復compareDNA到一個單獨的變量的值。然後你可以用這些值做任何你想要的事情(你想要做什麼並不清楚你的問題)。嘗試是這樣的:

S1 = compareDNA(Udnalin, Mdnalin) # bind the return value from this call to S1 
S2 = compareDNA(Udnalin, Hdnalin) # and this one to S2 

# do something with S1 and S2 here! 

如果你想要做的是特別簡單(如比較,看看哪一個較大),你甚至可以直接在表達式中使用的返回值,如在條件if聲明:

if compareDNA(Udnalin, Mdnalin) > S2 = compareDNA(Udnalin, Hdnalin): 
    print("Unknown DNA is closer to a Mouse") 
else: 
    print("Unknown DNA is closer to a Human") 

還有一個我想指出,這無關你的問題的核心進一步的事情:你應該使用with語句來處理關閉您的文件,而不是手動試圖關閉它們。您當前的代碼並沒有真正關閉文件(在每種情況下,您都需要使用.close以使其成爲函數調用)後,您會錯過括號。

如果使用with語句來代替,該文件將被自動在塊(即使有一個例外)結束時關閉:

with open("mouseDNA.txt", "r") as Mdna: 
    Mdnalin = Mdna.readline() 

print(Mdnalin) 

with open("humanDNA.txt", "r") as Hdna: 
    Hdnalin = Hdna.readline() 

print(Hdnalin) 

with open("unknownDNA.txt", "r") as Udna: 
    Udnalin = Udna.readline() 

print(Udnalin) 
相關問題