Python 确定序列是否为有效的DNA序列
我正试图编写一个程序,将一个序列读入一个名为Python 确定序列是否为有效的DNA序列,python,if-statement,python-3.x,for-loop,dna-sequence,Python,If Statement,Python 3.x,For Loop,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
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
之后添加的内容返回语法错误
我本来有
sequence = input().upper()
sequence= input("Please enter a sequence: ")
这两种方法在一起效果不好,谢谢你向VHARIOP指出这一点
更新:
这就是我现在所拥有的,而且很有效
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
如果因为这是一项家庭作业要求,所以必须对
循环和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
我只需要使用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
如果因为这是一项家庭作业要求,所以必须对
循环和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的i在有效的\u dna中)
对于属于有效的\u dna的序列中的每个字符将返回True,对于不属于有效的\u dna的每个字符将返回False。只有当表达式生成的每个值都为True时,内置函数才会返回True
如果需要正确的消息,只需检查表达式的返回值并相应地打印:
condition = all(i in valid_dna for i in sequence)
print('Valid sequence') if condition else print('Invalid sequence')
首先,你有:
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的i在有效的\u dna中)
对于属于有效的\u dna的序列中的每个字符将返回True,对于不属于有效的\u dna的每个字符将返回False。只有当表达式生成的每个值都为True时,内置函数才会返回True
如果需要正确的消息,只需检查表达式的返回值并相应地打印:
condition = all(i in valid_dna for i in sequence)
print('Valid sequence') if condition else print('Invalid sequence')
它做什么-告诉你得到了什么行为很重要。它做什么-告诉你得到了什么行为很重要。如果我在我的序列中添加空格
,那么它将打印无效序列
,如果我希望它仍然打印true(带空格),我应该添加序列=序列。strip(“”)
?哦,没关系,我添加了sequence=sequence.replace(“,”)
,它去掉了所有的空白!如果我在我的序列中添加空格
,那么它将打印无效序列
,如果我希望它仍然打印true(带空格),我是否应该添加sequence=sequence.strip(“”)
?哦,没关系,我添加了sequence=sequence.replace(“,”)
,并去掉了所有的空白!只使用代码的答案可能会解决问题,但如果您解释它们是如何解决问题的,它们会更有用。社区需要理论和代码来充分理解你的答案。只有代码的答案可以解决问题,但如果你解释它们是如何解决的,它们会更有用。社区需要理论和代码来充分理解您的答案。