2014-09-18 220 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) 
相关问题