繁体   English   中英

当要求为 3 的倍数写 function 时,为什么我总是出错?

[英]When asked to write function for multiple of 3, why do i keep getting errors?

当我被要求在我的 function 中写一个代码来计算代码的字符但前提是它是三的倍数时,我一直被卡住并且我已经尝试了很多次来弄清楚但无济于事:这个是问题。 ..,验证它的长度是 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”时,我总是得到 False。

你让这太复杂了。 function 需要做两件事:

  1. 判断输入字符串的长度是否是3的倍数
  2. 如果是,返回输入字符串的长度除以 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

请注意, //用于返回 integer 结果,而不是浮点结果(请参阅Python 教程)。

或者,您可以使用divmod function,它将 integer 除法与余数一步结合:

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

这个断言失败了,因为 return 语句在循环中并且只返回输入字符串的长度,而不是密码子的计数。 因此,它将始终返回输入字符串的长度,即使输入字符串中没有密码子。

assert countCodons("CAATGGG") == False

此断言成功,因为输入字符串中的第一个元素不是 3 的倍数,因此 function 返回 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM