当我被要求在我的函数中编写一个代码来计算一个代码的字符数,但只有当它是三的倍数时,我一直卡住,我已经尝试了很多次,但都无济于事!...验证其长度是3的倍数,并返回该字符串中的密码子数...
我试过这个:
def countCodons(DNA):
count = 0
for num in DNA:
if len(num) % 3 == 0:
count += 1
return len(DNA)
else:
return False
assert countCodons("CATGGG") == 2
assert countCodons("CAATGGG") == False
但是我一直得到一个错误。当我刚刚输入"countcodons"时,我一直得到假的。
2条答案
按热度按时间r9f1avp51#
你把这个弄得太复杂了。这个函数需要做两件事:
1.确定输入字符串的长度是否为3的倍数
1.如果是,则返回输入字符串的长度除以3
你认为你可以使用
... % 3 == 0
是正确的,但是你没有正确地应用它,你不需要一个for
循环,它会迭代字符串中的各个字符,直接应用于字符串的长度就可以了。关于2.,即使您设法计算了输入字符串中的字符数,也忘记了除以3。
这里有一个简单明了的解决方案:
注意,
//
用于返回整数结果,而不是浮点结果(参见Python教程)。或者,您可以使用
divmod
函数,该函数将整数除法与余数合并在一个步骤中:isr3a4wc2#
这个Assert失败是因为return语句在循环中,只返回输入字符串的长度,而不返回密码子的计数。所以,它总是返回输入字符串的长度,即使输入字符串中没有密码子。
此Assert成功是因为输入字符串中的第一个元素不是3的倍数,因此函数返回False。
要解决这个问题,return语句应该在循环之外,并返回密码子的计数。
这段代码现在将正确地返回输入字符串中的密码子计数。