我寫了下面的函式來檢查點串列是否在一個矩形內,并且只有當串列中的所有點都在矩形內時它才應該回傳 True。
def allIn(firstCorner=(0,0), secondCorner=(0,0), pointList=[]):
if len(pointList) == 0:
return False
for i in range(0, len(pointList)):
if (secondCorner[0]>=pointList[i][0]>=firstCorner[0] and secondCorner[1]>=pointList[i][1]>=firstCorner[1]):
return True
elif (secondCorner[0]>=pointList[i][0]>=firstCorner[0] and firstCorner[1]>=pointList[i][1]>=secondCorner[1]):
return True
elif (firstCorner[0]>=pointList[i][0]>=secondCorner[0] and secondCorner[1]>=pointList[i][1]>=firstCorner[1]):
return True
elif (firstCorner[0]>=pointList[i][0]>=secondCorner[0] and firstCorner[1]>=pointList[i][1]>=secondCorner[1]):
return True
return False
firstCorner 和 secondCorner 的坐標只是定義了矩形的一個角,并不總是代表矩形的左上角和右下角。
但是,結果總是回傳為 True。只有當不在矩形中的坐標是串列中的第一個元素時,它才會回傳 False。
例如:firstCorner = (0,0), secondCorner = (5,5), pointList=[(1,1), (0,0), (5,6)] (其中 (1,1) 和 (0 ,0) 在矩形中,而 (5,6) 不在)
print(allIn((0,0), (5,5), [(1,1), (0,0), (5,6)])) 總是回傳 True,對于 print(allIn((0 ,0), (5,5), [(1,1), (5,6), (0,0)]))。當我將串列設定為 print(allIn((0,0), (5,5), [(5,6), (1,1), (0,0)])) 時,它只回傳 False
有人可以幫我找出哪一部分是錯的嗎?
uj5u.com熱心網友回復:
似乎您在“for”陳述句中輸入了“return False”?(將 1 放在下面的代碼中?)
def allIn(firstCorner=(0,0), secondCorner=(0,0), pointList=[]):
if len(pointList) == 0:
return False
for i in range(0, len(pointList)):
if xx
return True
elif xx
return True
elif xx
return True
elif xx
return True
return False # place 1,here ? cause what you say
return False # or here ?
另外,如果實際代碼與你的問題相同,那也是錯誤的,因為代碼實作了“或”邏輯,即如果矩形中存在任何一點,它將回傳 True 。這是我的代碼:
def allIn(firstCorner=(0, 0), secondCorner=(0, 0), pointList=[]):
ret=[]
if len(pointList) == 0:
return False
for i in range(0, len(pointList)):
if (secondCorner[0] >= pointList[i][0] >= firstCorner[0] and secondCorner[1] >= pointList[i][1] >= firstCorner[
1]):
ret.append(1)
elif (secondCorner[0] >= pointList[i][0] >= firstCorner[0] and firstCorner[1] >= pointList[i][1] >=
secondCorner[1]):
ret.append(1)
elif (firstCorner[0] >= pointList[i][0] >= secondCorner[0] and secondCorner[1] >= pointList[i][1] >=
firstCorner[1]):
ret.append(1)
elif (firstCorner[0] >= pointList[i][0] >= secondCorner[0] and firstCorner[1] >= pointList[i][1] >=
secondCorner[1]):
ret.append(1)
else:
ret.append(0)
print("ret:",ret)
return all(ret)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429331.html
