Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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中的def只使用给定列表中的显式字符?_Python_Function - Fatal编程技术网

如何确保Python中的def只使用给定列表中的显式字符?

如何确保Python中的def只使用给定列表中的显式字符?,python,function,Python,Function,我正试图用def编写一个小代码,用Python创建我自己的函数。此函数检查用户提供的字符串是否为DNA序列。由于DNA只能由缩写为A,C,G,T的酸组成,所以我的函数应该只接受由这些字母组成的字符串,并返回True,否则它必须返回False。我的代码在某种程度上是这样做的,但在某些情况下,如“ACGTGATTCGF”或“cggcAgacAcAcAcAcAcAcaZaatCCG”或“它返回True而不是False”。我不明白为什么。代码如下: def is_this_dna(sequence):

我正试图用def编写一个小代码,用Python创建我自己的函数。此函数检查用户提供的字符串是否为DNA序列。由于DNA只能由缩写为A,C,G,T的酸组成,所以我的函数应该只接受由这些字母组成的字符串,并返回True,否则它必须返回False。我的代码在某种程度上是这样做的,但在某些情况下,如“ACGTGATTCGF”或“cggcAgacAcAcAcAcAcAcaZaatCCG”或“它返回True而不是False”。我不明白为什么。代码如下:

def is_this_dna(sequence):
    acids = ["A", "C", "G", "T"]
    for c in sequence:
        if c in acids:
            return True
        else:
            return False

#code driver
my_dna = str(input("Enter your DNA sequence:"))

print(is_this_dna(my_dna))

这是因为在检查所有元素之前,只要在字符串中找到一个字符,就会立即返回True

这样的办法应该行得通

def is_this_dna(sequence):
   acids = ["A", "C", "G", "T"]
   return all(c in acids for c in sequence)
另一个版本可能是。不过,我认为第一个更为惯用

def is_this_dna(sequence):
   acids = ["A", "C", "G", "T"]
   for c in sequence:
       if c not in acids:
           return False
   return True


这是因为在检查所有元素之前,只要在字符串中找到一个字符,就会立即返回True

这样的办法应该行得通

def is_this_dna(sequence):
   acids = ["A", "C", "G", "T"]
   return all(c in acids for c in sequence)
另一个版本可能是。不过,我认为第一个更为惯用

def is_this_dna(sequence):
   acids = ["A", "C", "G", "T"]
   for c in sequence:
       if c not in acids:
           return False
   return True


代码的问题是,您只检查第一个字符。检查后,两种情况下都有返回

请尝试:

def is_this_dna(sequence):
    acids = ["A", "C", "G", "T"]
    for c in sequence:
        if c not in acids:
            return False
    return True and len(sequence)>0
在这段代码中,只有在检查了所有字符并且序列不是空字符串之后,才会返回True

另一个解决方案可能是:

def is_this_dna(sequence):
    acids = ["A", "C", "G", "T"]
    return len(sequence)>0 and all([c in acids for c in sequence])

代码的问题是,您只检查第一个字符。检查后,两种情况下都有返回

请尝试:

def is_this_dna(sequence):
    acids = ["A", "C", "G", "T"]
    for c in sequence:
        if c not in acids:
            return False
    return True and len(sequence)>0
在这段代码中,只有在检查了所有字符并且序列不是空字符串之后,才会返回True

另一个解决方案可能是:

def is_this_dna(sequence):
    acids = ["A", "C", "G", "T"]
    return len(sequence)>0 and all([c in acids for c in sequence])
您可以创建一个集合来测试它是否是输入序列的超集:

def is_this_dna(sequence):
    return {"A", "C", "G", "T"}.issuperset(sequence)
您可以创建一个集合来测试它是否是输入序列的超集:

def is_this_dna(sequence):
    return {"A", "C", "G", "T"}.issuperset(sequence)

@卢卡·罗马格诺利谢谢你的帮助。我现在明白了一点。但是当字符串为空时仍然存在问题,它返回True而不是False是的,你应该事先检查边缘大小写并立即返回False。我的名字是卢卡顺便说一句:-再次感谢卢卡:@Lucka Romagnoli谢谢你的帮助。我现在明白了一点。但是当字符串为空时仍然存在问题,它返回True而不是False是的,你应该事先检查边缘大小写并立即返回False。我的名字是卢卡顺便说一句:-再次感谢卢卡: