2010-12-15 53 views
0

我正在使用其API編寫一些軟件的加載項。我需要做的是提取必要的數據。 我使用'FOR'去思考API類。每個對象都有屬性:索引(從0),類型(Lin,Ptp和其他)和值。瀏覽對象列表時,我對兩種類型的對象感興趣 - 那些類型爲「Lin」或「Ptp」的對象;這麼幾個條件應滿足:迭代中的多個條件,Python

至於林類型:

  • 如果有一些PTP林前(可能還有其他類型的他們之間的其他物體,雖然),林得到PTP的值PTP ....林。
  • 如果在Lin之前還有其他一些Lin(雖然它們之間可能還有其他類型的其他對象,但是),Lin獲得了先前最接近Lin的值[Lin .... Lin]。
  • 如果在Lin之前既沒有Lin也沒有Ptp(雖然它們之間可能還有其他類型的其他對象),但Lin的值爲「0」[... Lin]。

至於PTP類型,它總是獲得自己的價值

,因爲我在Python初學者,思緒之中,現在混合,我不能拿出合適的算法。

我想這應該是財產以後這樣的:

for object in obects: 
    If object.type == Ptp: 
    ...object gets its own value 
    elif object.type == Lin: 
    ... 

這裏,應該有根據[...Lin][Lin...Lin][Ptp...Lin]

+0

你的問題很難理解。發佈一些代碼將有所幫助。 – dheerosaur 2010-12-15 08:50:53

+0

還沒有驗證碼。 – Maks 2010-12-15 08:52:16

+0

「對象獲得自己的價值」是什麼意思? – Johnsyweb 2010-12-15 09:20:22

回答

1

我建議你遍歷你的對象等3個條件,並記住最後一次出現LinPtp類型(不管那些可能是...... :)):

lastOccurrence = None 
for obj in objects: 
    if obj.type not in ('PtP', 'Lin'): 
     continue 

    if obj.type == 'Lin': 
     if lastOccurrence is not None: 
      obj.value = lastOccurrence.value 
     else: 
      obj.value = "0" 

    lastOccurrence = obj     

或類似的東西...

2

因爲我是一個Python的初學者,我的經驗現在混合,我不能拿出適當的算法。

如果您正試圖拿出一個合適的算法退一步忘記Python(C++,Fortran,Logo,Awk等等),並想想你正試圖解決的問題。嘗試在紙上寫一些僞代碼。

從你的僞代碼中,Python應該會變得更加明顯,任何技術難題都可能成爲StackOverflow(例如)或者你的同事問的更具體的問題。

+0

這樣做,你可以看到它在頁面 – Maks 2010-12-15 09:08:18

+1

這甚至沒有足夠的細節。繼續思考。 – 2010-12-15 10:29:06

0

我會使用一種叫做finite-state machine或FSM去雖然API對象。當您遇到不同類型和相關屬性時,您可以存儲有關FSM「狀態」中所見內容的信息,這些信息也決定了發生或遇到下一個「事件」(您正在迭代的項目)時發生的情況。收集的信息可以根據需要輸出(即,當達到一定的狀態。

FSM的是一個相當簡單的概念精益和程序(在幾乎任何語言),以及這類問題是非常有用的。