一.要求
二维数组,从左到右,从上到下递增,判断其中是否有某个特定的值,此类二维数组如下所示
二.相关概念
注意题目要求的是数组array,在main函数中使用A=[[],[]...]即可完成初始化,不要做成矩阵的方法
三.思路
从右上角开始查找,大于目标则去掉该列,左移查找位;小于目标则去掉该行,下移查找位。本题也可以从左下角开始查找,遇到新题型,通过实例寻找解题方法。
四.程序
#修改前 def searchnum1(A,b): row=len(A) column=len(A[0]) i,j=0,column-1 while A[i][j]!=b: if A[i][j]>b: if j>0: j-=1 else: print('cannot find the number') return if A[i][j]<b: if i<row-1: i+=1 else: print('cannot find the number') return print('find the number,the place is A[',i,'][',j,']') return #修改后 def searchnum2(A,b): if not A: print('输入矩阵不符合要求') return if b==None: print('输入值不符合要求') return row=len(A) column=len(A[0]) i,j=0,column-1 while(i<row and j>=0):#不能用& if A[i][j]>b:j-=1 elif A[i][j]<b:i+=1 else: print('find the number,the place is A[', i, '][', j, ']') return print('cannot find the number') return def main(): A=[[1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]] b=9 searchnum2(A,b) if __name__=='__main__': main()
五.思考与总结
修改后的程序对不规范输入情况做了限制,会print错误类型提示;此外把一些冗余功能做了精简:
1.当输入数组A为空,即A=[]时,print 输入矩阵不符合要求。
2.当输入b=None时,print 输入值不符合要求。一二两点都是通过 if not X 实现的,加强程序鲁棒性
3.还有一点需要注意的是,当查找范围超出index时的处理,不是最终会查找到A[0][0],由于指针是从右上向左下,要满足
i<row and j>=0
4.注意 and 和&是不一样的,前者为逻辑运算,后者为位运算,会发生一些奇妙的事情
print(i,j,row) print(i<row , j>=0,i<row and j>=0,i<row & j>=0,True&True,1&2)结果为:
0 3 4 True True True False True 0
5.print输出时,字符之间可以用+,但用到变量就只能用逗号,
6 .if最好严格按照缩进写,不要写一行,容易把自己绕进去
7.只有elif,if __name__=='__main__'
没有elseif,没有if '__name__'