You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python运行时print语句出现多余打印输出的排查修复方法

多余打印输出排查方案

你看到的多余打印行不是程序异常,是调试打印语句的放置位置不符合预期导致的。

问题根源

你把打印变量状态的print语句写在了while循环块的最开头,循环每执行一次迭代,就会触发一次打印,二分查找逻辑本身运行是正确的,完整执行流程如下:

  1. 第一次循环迭代:lo=0、hi=7,计算得到mid=3、mid_number=7,打印第一行日志;此时判断nums[mid]=7 > nums[hi]=3成立,因此将lo赋值为4,循环条件仍满足,进入下一次迭代。
  2. 第二次循环迭代:进入循环后首先触发print语句,打印出你认为多余的lo: 4 , hi: 7 , mid: 5 , mid_number: 1行;后续判断发现nums[5]=1 < nums[4]=8,满足旋转点判定条件,直接返回结果5,循环终止。
  3. 最外层的print语句判断返回值5和预期输出5相等,打印True,就是你看到的实际运行结果。

修复方式

根据实际需求选对应方案即可:

  • 如果不需要保留调试日志:直接删除循环内的那行print调试语句,运行后就只会输出最终判断结果True。
  • 如果需要保留第一次迭代的调试日志、不打印后续迭代的内容:给打印逻辑加首次迭代判断即可,修改后的函数参考如下:
def count_rotations_binary(nums):
    lo = 0
    hi = len(nums)-1
    is_first_loop = True
    
    while lo<=hi:
        mid = (lo+hi)//2
        mid_number = nums[mid]
        
        # 仅第一次循环打印调试信息
        if is_first_loop:
            print("lo:", lo, ", hi:", hi, ", mid:", mid, ", mid_number:", mid_number)
            is_first_loop = False

        if mid > 0 and nums[mid]<nums[mid-1]:
            return mid
        
        elif nums[mid] > nums[hi]:
            lo = mid + 1  
        
        else:
            hi = mid - 1
    
    return 0

运行修改后的代码,输出就和预期结果完全一致。

内容的提问来源于stack exchange,提问作者Aksh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:54:19