我试图交叉比较在compareDNA (计算汉明距离)中标有"S“的两个输出。不过,我不知道如何从一个def调用一个整数到另一个。我已经尝试返回变量,但是在返回变量后,我无法调用它(在另一个def中)。我试图看看“compareDNA(泼尼林,泼马林)”和“compareDNA(泼尼林,Hdnalin)”的输出更高,以确定哪一个有更大的汉明距离。如何将整数从一个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()发布于 2014-09-19 01:48:02
您可能希望将每次调用compareDNA返回的值赋给var函数中的一个单独的变量。然后,你可以用这些值做你想做的任何事情(你到底想做什么,从你的问题中还不清楚)。试着做这样的事情:
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)https://stackoverflow.com/questions/25924238
复制相似问题