在Python中将整数从一个def传递到另一个def
问题描述:
我试图在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()
答
你可能想通过分配给每个呼叫在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)