Python入门题求助:排查通过奇数和判断完美平方数的代码错误
问题分析与解决方案
你的代码核心问题是:循环累加了所有不大于n的奇数,而不是题目要求的前k个奇数的和。比如测试n=9时,你的代码会计算1+3+5+7+9=25,显然不等于9,所以返回False,这和题目要求的逻辑完全不符。
方案一:贴合题目逻辑的实现
按照题目描述,累加前k个奇数,直到和等于n(返回True)或者超过n(返回False):
def perfect_square(n): if n < 1: return False total = 0 current_odd = 1 while total < n: total += current_odd current_odd += 2 return total == n
测试示例:
- n=1:total=1,返回True
- n=4:total累加1+3=4,返回True
- n=9:累加1+3+5=9,返回True
- n=8:累加至1+3+5+7=16>8,返回False
方案二:利用数学性质简化实现
完美平方数的平方根是整数,所以可以通过计算平方根后验证:
def perfect_square(n): if n < 1: return False square_root = int(n ** 0.5) return square_root * square_root == n
这个方法更高效,避免了循环累加的过程,直接通过数学计算完成验证。
内容的提问来源于stack exchange,提问作者mari00
相关产品推荐
相关产品推荐

