我编写了这个程序,我将两个不同的DNA序列存储在两个不同的文件中。我将DNA序列进行比较,看看哪些字符不同,哪些字符不同。 这是我到目前为止的代码,但我没有得到我想要的输出。
WildDNAf = raw_input("Enter Wild DNA file: " )
wildDNA = open(WildDNAf).read()
MutDNAf = raw_input("Enter Mut DNA file: ")
mutDNA = open (MutDNAf).read()
dnacount = 0
for i in range(len(wildDNA)):
if wildDNA[i] != mutDNA:
print i + 1 , wildDNA[i], mutDNA[i]
dnacount = dnacount +1
print "There are", dnacount, "Mutations"
这就是我得到的:
There are 2589 Mutations
2590 T T
There are 2590 Mutations
2591 T T
There are 2591 Mutations
2592 G T
There are 2592 Mutations
2593 A G
There are 2593 Mutations
2594 A A
There are 2594 Mutations
我试图获得一个输出,显示两个序列之间发现的任何突变的列表以及发现突变的位置。 可以在https://uploadfiles.io/wpuey https://ufile.io/dzzvi
中找到DNA序列的文件答案 0 :(得分:2)
我认为问题就在于这一行,它将wildDNA
的单个字符与mutDNA
中的整个字符串进行比较。
if wildDNA[i] != mutDNA:
你可能想要这个,它将比较每个(在同一个索引处)的单个字符。
if wildDNA[i] != mutDNA[i]:
还要确保缩进正确。由于缩进,您分享的内容不是有效的Python,并且您的输出让我认为print
语句在循环内部,即使您共享的代码将其置于循环之外。
<强>更新强>
带输出的完整工作代码(Python 3.x):
def read_dna_file(filename):
with open(filename, 'rt') as f:
return ''.join(line.strip() for line in f.readlines()[1:])
a = read_dna_file('wild.fasta')
b = read_dna_file('mut.fasta')
assert len(a) == len(b)
count = 0
for i in range(len(a)):
if a[i] != b[i]:
print(i, a[i], b[i])
count += 1
print("There are {} mutations.".format(count))
# Output:
# 0 T A
# 87 A G
# 88 A G
# 1307 G C
# 2367 T C
# There are 5 mutations.
请注意,每个文件的顶部都包含不同内容(不同长度)的行。因此,在尝试逐个字符比较之前,您需要跳过它,否则文件中的几乎所有内容都将无法匹配。我的read_dna_file
函数跳过第一行,然后忽略文件中的换行符。