确定一个序列是否是有效的 DNA 序列

Determining if a sequence is a valid DNA sequence

我正在尝试编写这个程序,将序列读入一个名为 sequence 的字符串变量,并确定 sequence 是否包含有效的 DNA 序列。 我想使用一个 for 和一个 if-elif-else 语句来确定序列是否为有效 DNA。
这是我到目前为止写的:

sequence = input("Please enter a sequence: ").upper()
valid_dna = "ACGT"
sequence = sequence.replace(" ", "")

common=0
for eachletter in sequence:
    if eachletter in valid_dna:
        common +=1

print("This is a valid dna sequence")

elif sequence != valid_dna:
    print("This is not a valid DNA sequence")

else:
    print()

我不知道在elif后面加什么,因为我在elif后面加的是returnsSyntax error

我原来有

sequence = input().upper()
sequence= input("Please enter a sequence:  ")

不能很好地协同工作,感谢 VHarisop 指出!

更新: 这就是我现在所拥有的,并且有效!

sequence = input().upper()
valid_dna = "ACGT"
sequence = sequence.replace(" ", "")

for i in sequence:
    if i in valid_dna:
            count = 1
    else:
            count=0
if count==1:
    print("This is a valid DNA sequence.") 
else:
    print("This is an invalid DNA sequence")

我只会使用 all 和一个生成器表达式

>>> valid = 'ACTG'

>>> s1 = 'ATAGCGGCAT'
>>> all(i in valid for i in s1)
True

>>> s2 = 'ABCDEFHI'
>>> all(i in valid for i in s2)
False

如果你必须使用for循环和if语句因为这是作业要求,你可以使用类似的想法

def validSequence(s):
    valid = 'ACTG'
    for letter in s:
        if letter not in valid:
            return False
    return True

>>> validSequence('ATAGCGGCAT')
True
>>> validSequence('ABCDEFHIJK')
False

首先,你有:

sequence = input().upper()
# irrelevant code
sequence= input("Please enter a sequence:  ")

这将要求输入两次,第一次将您键入的所有内容转为大写,第二次则保持不变,这显然会导致错误行为。我建议只保留:

sequence = input('Please enter a sequence: ').upper()

然后使用生成器表达式来检查有效性。

实际上,没有必要为无效字符保留一个单独的字符串。只要做:

valid_dna = 'ACGT'
sequence = input('Please enter a sequence: ').upper()

# will print True if every character in the sequence belongs to valid_dna
print(all(i in valid_dna for i in sequence))

此处,生成器表达式 (i in valid_dna for i in sequence) 将为序列中属于 valid_dna 的每个字符 return True,对于不属于 valid_dna 的每个字符都为 False。仅当表达式生成的每个值都为真时,内置函数 any() 才会 return 为真。

如果您想要正确的消息,您可以简单地检查表达式的 return 值并相应地打印:

condition = all(i in valid_dna for i in sequence)
print('Valid sequence') if condition else print('Invalid sequence')
def is_valid_sequence(dna):
    char_invalid = ''
    for char in dna:
        if char not in 'ATCG':
            char_invalid = char_invalid + char
    return not bool (char_invalid)