NB Noob警報...!在Python類方法中使用遞歸
我想在Python類方法中使用遞歸,但效果有限。
我試圖建立一個汽車類,具有非常基本的屬性:id,在單車道道路(用整數表示)中的位置和速度。有一個問題我必須用於返回哪輛車ID在前面就這一個功能 - 即,如果我們有類:
class Car:
def __init__(self, position, id, velocity):
self.position = position
self.id = id
self.velocity = velocity
現在,我已經想出了下面的類方法(更多詳細信息如下代碼):
def findSuccessorCar(self, cars):
successorCar = ""
smallestGapFound = 20000000
for car in cars:
if car.id == self.id: continue
currentGap = self.calculateGap(car)
if (currentGap > -1) and (currentGap < smallestGapFound):
smallestGapFound = currentGap
successorCar = car
if successorCar == "":
return 1 # calling code checks for 1 as an error code
else:
return successorCar
該計劃是創建汽車對象,然後將它們存儲在一個列表中。每次調用findSuccessorMethod時,將這個全局汽車列表傳遞給它,例如,
c1 = testCar.Car(4, 5, 1) # position, pos_y, Vel, ID
c2 = testCar.Car(7, 9, 2)
c3 = testCar.Car(9, 1, 2)
cars = [c1, c2, c3]
c1_succ = c1.findSuccessorCar(cars)
也能正常工作:在找到繼任者車功能會說,汽車C2是在汽車C1(位置7領先的位置4)的前面。
但是,我想讓汽車c1知道哪輛車在它的直接接班人面前 - 也就是說,哪輛汽車在前面的汽車前面,在這種情況下是汽車c3。我的想法是,如果我做了c1_succ.findSuccessorCars(汽車),那麼這應該工作得很好:做type(c1_succ)顯示它是一個實例,hasattr顯示它具有預期的對象屬性。
但是,當我嘗試執行c1_succ.findSuccessorCars(cars)時,返回一個整數。因此,我很困惑 - 爲什麼這不起作用?爲什麼你不能以這種方式遞歸執行一個類方法?這個整數來自哪裏?
NB Gut覺得這與自我聲明有關,而且我需要修改我的代碼,以至於全球汽車列表也需要全局列表他們的當前位置,或另一個類的方法,例如 findSuccessorsSuccessor(是的,完全意識到蹩腳的命名!)。但是,我有興趣瞭解爲什麼這種遞歸方法不起作用。
UPDATE
這裏是計算2臺車之間的間隙的請求的代碼 - 我在後面欣賞它是非常基本的,所以沒有太多的笑聲吧。
def calculateGap(self, car):
''' Calculate the gap between two cars
'''
thisCar = self
otherCar = car
gap = otherCar.position_x - thisCar.position_x
return gap
你能張貼'calculateGap'的代碼?那麼它應該有可能重現你所看到的。 – mikej 2010-08-12 09:11:45
@ MYYN,這不是一個好主意; 'sys.maxint + 1'是一個有效的整數。 「沒有」會成爲更好的哨兵。 – habnabit 2010-08-12 09:20:00