[英]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 需要做两件事:
您假设可以以某种方式使用... % 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.