Python 如何拆分字符串(输入)和用作字典值的每个部分?

Python 如何拆分字符串(输入)和用作字典值的每个部分?,python,python-3.x,Python,Python 3.x,所以我想写一个程序来检查DNA是否发生了变异,我不知道如何解释,所以它是这样说的: 编写一个程序,以确定患者的DNA序列是否发生突变,从而导致氨基酸序列的改变。您的程序应该是这样工作的: 这是我使用的文本文件的一部分: The mappings from codon to amino acid are available in a file, called codon_amino.txt, an excerpt of which is shown here: AAC N AAG K AAT

所以我想写一个程序来检查DNA是否发生了变异,我不知道如何解释,所以它是这样说的:
编写一个程序,以确定患者的DNA序列是否发生突变,从而导致氨基酸序列的改变。您的程序应该是这样工作的:

这是我使用的文本文件的一部分:

The mappings from codon to amino acid are available in a file, called codon_amino.txt, an excerpt of which is shown here:


AAC N
AAG K
AAT N
GCG A
GCT A
GGA G
GGC G
GGG G
GGT G
这是我到目前为止的代码:

n = {}
for line in open('codons.txt'):
    codon, codons = line.split()
    n[codon] = codons


org = input('Enter original DNA: ')
pat = input('Enter patient DNA: ')

if n[org] == n[pat]:
    print("The patient's amino acid sequence is not mutated.")
else:
    print("The patient's amino acid sequence is mutated.")

因此,我的代码在第一个示例中可以正常工作,其中只使用了3个字母,但接下来的两个有3个以上,我想知道如何操作我的代码来处理这些字母?我希望有人能理解这个问题。提前谢谢你

您需要逐个迭代密码子(这里字符串是您的朋友),并检查所有密码子的条件

mutated = False           # First, assume no mutation is present
for index in range(0, len(org), 3):
    if n[org[index:index+3]] != n[pat[index:index+3]]:
        mutated = True    # Set mutation flag to True
        break             # Abort the loop - no point in checking any further
if mutated:
    print("The patient's amino acid sequence is mutated.")
else:
    print("The patient's amino acid sequence is not mutated.")
这假设
org
pat
长度相同,可以被三整除。您可能需要事先插入检查以确保情况属实。

类似以下内容:

for i in range(0, len(org), 3):
    if n[org[i:i + 3]] != n[pat[i:i + 3]]:
        return "The patient's amino acid sequence is mutated."

return "The patient's amino acid sequence is not mutated."
较短版本:

n = {}
for line in open('codons.txt'):
    codon, codons = line.split()
    n[codon] = codons


org = input('Enter original DNA: ')
pat = input('Enter patient DNA: ')

if len(org) + len(pat) % 3 or len(org) != len(pat):
    raise ValueError

if any((n[org[i: i+3]] != n[pat[i: i+3]] for i in xrange(len(org)))):
    print("The patient's amino acid sequence is mutated.")
else:
    print("The patient's amino acid sequence is not mutated.")

这和这个作业一样吗看起来你有你的答案了…你必须把输入字符串分成三位,然后检查所有的位。基本上你需要的是这样工作!除了我尝试最长的例子外,它告诉我患者的氨基酸序列发生了突变。病人的氨基酸序列发生了变异。患者的氨基酸序列没有发生突变。而不仅仅是第一行,我如何改变它?如果使用
print
而不是
return
(需要将上述代码包装在函数中),就会发生这种情况。
n = {}
for line in open('codons.txt'):
    codon, codons = line.split()
    n[codon] = codons


org = input('Enter original DNA: ')
pat = input('Enter patient DNA: ')

if len(org) + len(pat) % 3 or len(org) != len(pat):
    raise ValueError

if any((n[org[i: i+3]] != n[pat[i: i+3]] for i in xrange(len(org)))):
    print("The patient's amino acid sequence is mutated.")
else:
    print("The patient's amino acid sequence is not mutated.")