编写Python时遇到的蛋疼的错误

本文分享了一次使用Python实现归并排序时遇到的bug排查经历。作者在调试过程中发现了一个细微但重要的语法错误,并通过调整成功修复了程序。文章还提到了Python调试工具pdb的使用。

 今天用Python写了个简单的merge sort程序,结果就是出错,找了好久没找到问题,代码如下:


  1. A=[1,3,9,2,6,5,4,7,8,10
  2. def merge(p,q,r): 
  3.         n1 = q - p + 1 
  4.         n2 = r - q 
  5.         L = [] 
  6.         R = [] 
  7.         for i in (0,n1): 
  8.                 L.append(A[p+i]) 
  9.         for j in (0,n2): 
  10.                         R.append(A[q+j+1]) 
  11.         print "merge:",L,R 
  12.         L.append(1000
  13.         R.append(1000
  14.  
  15.         k = p 
  16.         i = 0
  17.         j = 0 
  18.         while k <= r: 
  19.                 if L[i] <= R[j]: 
  20.                         A[k] = L[i] 
  21.                         i = i + 1 
  22.                 else
  23.                         A[k] = R[j] 
  24.                         j = j + 1 
  25.                 k = k + 1 
  26. def merge_sort(p,r): 
  27.         if p < r: 
  28.                 q = (p + r)/2 
  29.                 merge_sort(p,q) 
  30.                 merge_sort(q+1,r) 
  31.                 merge(p,q,r) 
  32. merge_sort(0,9
  33. print A 

我在纸上算了很久,不该有错啊,但是就是不对。不知道Python怎么调试,还专门找了些Python调试的东西,例如一个简单的Python调试工具pdb, http://docs.python.org/2/library/pdb.html,还没等怎么调试的,找到问题了。

原来是for i in (0,n1),我的本意是for(i=0; i < n1; i++),也就是要用for i in range(0,n1),没有加range,后果就是i=0,i=n1,唉,找了很久才找到这个蛋疼的错误。


本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/1082968,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值