为了账号安全,请及时绑定邮箱和手机立即绑定

关于return语句的诡异事件

关于return语句的诡异事件

天涯尽头无女友 2018-08-05 06:09:40
def search(num,seq=[]):    if len(seq)==1:  #      print("3")#        assert seq[0]==num  #       num1=seq[0]         return seq[0]    elif num<seq[len(seq)//2]: #       print("2")         seq=seq[0:len(seq)//2]         search(num,seq=seq[:])        return 2    elif num > seq[len(seq)//2]:  #      print("1")         seq=seq[len(seq)//2+1:]         search(num,seq=seq[:])    else:   #     print("5")         return seq[len(seq)//2]def test(seq):    return 2seq=[1,2,3,4,5,6,7,8] seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))None [1, 2, 3, 4, 5, 6, 7, 8]2上例为实现二分法的示例,输出search(6,seq)函数应该返回搜索值,但是总是返回None,请各位帮忙解决
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

至少也应该是这样的:

def search(num,seq=[]):    if len(seq)==1:        return seq[0]    elif num<seq[len(seq)//2]:
        seq=seq[0:len(seq)//2]        return search(num,seq=seq[:])    elif num > seq[len(seq)//2]:
        seq=seq[len(seq)//2+1:]        return search(num,seq=seq[:])    else:        return seq[len(seq)//2]def test(seq):    return 2seq=[1,1,2,3,4,5,6,7,8]
seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))

 

但你的代码是返回搜索值(而非index),在不破坏源程序结构的情况下可以改成这样来返回index:

 

def search(num,seq=[]):
    mid=len(seq)//2    if len(seq)==1:        return 0    elif num<seq[mid]:        return mid+search(num,seq=seq[0:mid])    elif num > seq[mid]:        return mid+search(num,seq=seq[mid+1:])    else:        return middef test(seq):    return 2seq=[1,1,2,3,4,5,6,7,8]
seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))


查看完整回答
反对 回复 2018-08-25
  • 1 回答
  • 0 关注
  • 634 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信