Python运行时print语句出现多余打印输出的排查修复方法
多余打印输出排查方案
你看到的多余打印行不是程序异常,是调试打印语句的放置位置不符合预期导致的。
问题根源
你把打印变量状态的print语句写在了while循环块的最开头,循环每执行一次迭代,就会触发一次打印,二分查找逻辑本身运行是正确的,完整执行流程如下:
- 第一次循环迭代:lo=0、hi=7,计算得到mid=3、mid_number=7,打印第一行日志;此时判断
nums[mid]=7 > nums[hi]=3成立,因此将lo赋值为4,循环条件仍满足,进入下一次迭代。 - 第二次循环迭代:进入循环后首先触发print语句,打印出你认为多余的
lo: 4 , hi: 7 , mid: 5 , mid_number: 1行;后续判断发现nums[5]=1 < nums[4]=8,满足旋转点判定条件,直接返回结果5,循环终止。 - 最外层的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
相关产品推荐
相关产品推荐

