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