Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定序列是否为有效的DNA序列_Python_If Statement_Python 3.x_For Loop_Dna Sequence - Fatal编程技术网

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(“,”)
,并去掉了所有的空白!只使用代码的答案可能会解决问题,但如果您解释它们是如何解决问题的,它们会更有用。社区需要理论和代码来充分理解你的答案。只有代码的答案可以解决问题,但如果你解释它们是如何解决的,它们会更有用。社区需要理论和代码来充分理解您的答案。