python-3.x 当我被要求写3的倍数的函数时,为什么我总是得到错误?

iswrvxsc  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(120)

当我被要求在我的函数中编写一个代码来计算一个代码的字符数,但只有当它是三的倍数时,我一直卡住,我已经尝试了很多次,但都无济于事!...验证其长度是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"时,我一直得到假的。

r9f1avp5

r9f1avp51#

你把这个弄得太复杂了。这个函数需要做两件事:
1.确定输入字符串的长度是否为3的倍数
1.如果是,则返回输入字符串的长度除以3
你认为你可以使用... % 3 == 0是正确的,但是你没有正确地应用它,你不需要一个for循环,它会迭代字符串中的各个字符,直接应用于字符串的长度就可以了。
关于2.,即使您设法计算了输入字符串中的字符数,也忘记了除以3。
这里有一个简单明了的解决方案:

def countCodons(DNA):
    if len(DNA) % 3 == 0:  # length is a multiple of 3
        return len(DNA) // 3
    else:
        return False

注意,//用于返回整数结果,而不是浮点结果(参见Python教程)。
或者,您可以使用divmod函数,该函数将整数除法与余数合并在一个步骤中:

def countCodons(DNA):
    count, remainder = divmod(len(DNA), 3)
    if remainder == 0:
        return count
    else:
        return False
isr3a4wc

isr3a4wc2#

这个Assert失败是因为return语句在循环中,只返回输入字符串的长度,而不返回密码子的计数。所以,它总是返回输入字符串的长度,即使输入字符串中没有密码子。

assert countCodons("CAATGGG") == False

此Assert成功是因为输入字符串中的第一个元素不是3的倍数,因此函数返回False。
要解决这个问题,return语句应该在循环之外,并返回密码子的计数。

def countCodons(DNA):
  count = 0
  for num in DNA:
    if len(num) % 3 == 0:
      count += 1
  return count if count > 0 else False

这段代码现在将正确地返回输入字符串中的密码子计数。

相关问题