确定一个序列是否是有效的 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)
我正在尝试编写这个程序,将序列读入一个名为 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)