编写countCodons函数报错求助:验证DNA长度为3的倍数并返回密码子数
问题排查与修正
你的代码存在几个关键逻辑错误,导致始终返回False:
错误点分析
- 不必要的循环遍历:
for num in DNA会逐个遍历DNA字符串的每个字符,此时num是单个字符(比如第一个字符是'C'),len(num)永远等于1,1对3取余不等于0,所以直接触发else分支返回False,这是核心问题。 - 返回值错误:就算逻辑正确,你返回的是
len(DNA),但题目要求返回密码子数量(即长度除以3),而非原字符串长度。 - 循环内提前返回:第一次循环就直接执行return,完全没有遍历的必要,逻辑上完全错误。
修正后的代码
def countCodons(DNA): if len(DNA) % 3 == 0: return len(DNA) // 3 else: return False # 验证断言 assert countCodons("CATGGG") == 2 assert countCodons("CAATGGG") == False
代码说明
- 直接判断整个DNA字符串的长度是否为3的倍数,无需循环遍历每个字符。
- 符合条件时,返回
len(DNA) // 3(整数除法,得到密码子的数量)。 - 不符合条件时返回False,完全符合题目要求。
内容的提问来源于stack exchange,提问作者Adina
相关产品推荐
相关产品推荐

