剛剛學習python,利用thinkpython2的文本,其中一個練習是關于如何快速確定一個數字或者字符是否在順序排列的數字或字符組合中,方法是每次都從1/2處找起。
我寫了一個代碼,如下: 第一個功能就看字符在不在字符的list里,第二個功能生成初始的搜索位置,并呼叫第一個功能。我遇到的問題是運行之后不出現True 或者False, 但我實在看不出問題出現在哪里。我嘗試在代碼中加入很多print,來看程式運行情況,看起來是沒有問題,最后都會到if start+1 == end: 或者 elif a==t[int((start+end)/2)]:
請前輩幫我看下問題出在哪里。萬分感謝!
def is_there(a,start,end,b):
''' a is an integer or a string, b is a list, start and end are the range of the list for searching'''
t=sorted(b)
if start+1==end:
return (a == t[end] or a == t[start])
elif a==t[int((start+end)/2)]:
return True
elif a>t[int((start+end)/2)]:
start=int((start+end)/2)
is_there(a,start,end,t)
else:
end=int((start+end)/2)
is_there(a,start,end,t)
'''the following function takes a string or integer and a list as the argument'''
def in_bisect(a,b):
start=0
end=len(b)-1
is_there(a,start,end,b)
b=[1,2,3,4,5,6,7,8,9,0,12,23,54,7523,4365,12443,43643,123645,3242456,324244]
a=111
in_bisect(a,b)
uj5u.com熱心網友回復:
我把return轉換成print后再運行,就可以顯示出True or Falseuj5u.com熱心網友回復:
return是不列印的uj5u.com熱心網友回復:
這題debug的我懷疑人生,mark等大神解答uj5u.com熱心網友回復:
不過有一點是確定的,你的in_bisect沒有回傳值uj5u.com熱心網友回復:
是不是遞回函式沒加return的原因。代碼如下:
def is_there(a , start , end , b) :
t = sorted(b)
if start + 1 == end :
return a == t[end] or a == t[start]
elif a == t[int((start + end) / 2)] :
return True
elif a > t[int((start + end) / 2)] :
start = int((start + end) / 2)
return is_there(a , start , end , t)
else :
end = int((start + end) / 2)
return is_there(a , start , end , t)
def in_bisect(a , b) :
start = 0
end = len(b) - 1
return is_there(a , start , end , b)
b = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 12 , 23 , 54 , 7523 , 4365 , 12443 , 43643 , 123645 , 3242456 , 324244]
a =111
print(in_bisect(a , b))
a =1
print(in_bisect(a , b))
結果是有True和False的:
False
True
uj5u.com熱心網友回復:
也不盡然的,下面這個很簡單的代碼,運行后就會輸出True or False的
def xc(a):
if a%2!=0:
return True
else:
return False
xc(4)
xc(7)
uj5u.com熱心網友回復:
十分感謝,果然是,還想請教為什么必須要加return呢。即使不加額外的三個return,遞回的陳述句最終都會回到return 陳述句,為什么這個情況下不return結果
uj5u.com熱心網友回復:
謝謝哈,樓下已經有人解答了,我不太明白沒有回傳值,in_bisect呼叫了另外一個功能is_there,這個功能有return。這種情況下也沒有回傳值嗎?
uj5u.com熱心網友回復:
那我也想問,為什么不return呢?if的時候你return,else分支就不用return了嗎?
那當然了,如果永遠也走不到else那里去,是不用return的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202804.html
下一篇:基于RNN自編碼器的離群點檢測
