如何计算数字减半至1的次数?Python代码报错求助
问题分析与修复
原代码的核心问题
range(n, 1)无效:Python的range(start, stop)默认步长为1,当start > stop时生成空序列,循环根本不会执行。- 循环变量误用:
for循环会自动重置i的值,手动i+=1完全起不到计数作用。 - 提前返回:
return i写在循环内部,即便循环执行,第一次迭代就会直接退出,无法完成多次操作的计数。 - 逻辑偏离需求:代码没有对输入的
n执行持续减半操作,反而错误操作循环变量,完全不符合功能要求。
修复后的代码
循环实现(直观易懂)
def halve(n): count = 0 current = n # 当前值大于1时,持续减半并计数 while current > 1: current = current / 2 count += 1 return count
测试验证:
print(halve(4)) # 输出2 print(halve(11)) # 输出3
数学公式实现(高效简洁)
利用对数计算,每次减半等价于除以2,操作次数等于以2为底n的对数的整数部分:
import math def halve(n): return math.floor(math.log2(n))
该实现同样满足需求:log2(4)=2,log2(11)≈3.459,取整后为3。
内容的提问来源于stack exchange,提问作者Adam Cora
相关产品推荐
相关产品推荐

