2010-12-15 65 views
0

J'écris un add-on pour certains logiciels, en utilisant son API. Ce que je dois faire est d'extraire les données nécessaires. J'utilise 'FOR' pour aller des classes d'API pensées. Chaque objet a des propriétés: index (à partir de 0), type (Lin, Ptp et autres) et valeur. En parcourant la liste des objets, je m'intéresse à deux types d'objets - ceux qui ont le type 'Lin' ou 'Ptp'; si quelques conditions doivent être remplies:Plusieurs conditions à l'intérieur de l'itération, Python

En ce qui concerne le type Lin:

  • s'il y a une Ptp avant Lin (il peut y avoir d'autres objets d'autres types entre eux, cependant), Lin obtient la valeur de Ptp [ Ptp .... Lin].
  • s'il y a un autre Lin avant Lin (il peut y avoir d'autres objets d'autres types entre eux, cependant), Lin obtient cette valeur Lin la plus proche précédente [Lin .... Lin].
  • s'il n'y a ni Lin ni Ptp avant Lin (il peut y avoir d'autres objets d'autres types entre eux, cependant), Lin obtient la valeur "0" [... Lin].

En ce qui concerne le type Ptp, il obtient toujours sa propre valeur

Comme je suis un débutant en Python, mes thoughs sont mélangés maintenant et je ne peux pas venir avec algorithme approprié.

Je pensais que ce devrait être somthing comme ceci:

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

Ici, il devrait y avoir 3 autres conditions selon [...Lin] ou [Lin...Lin] ou [Ptp...Lin]

+0

Votre question est difficile à comprendre. L'affichage de code aidera. – dheerosaur

+0

il n'y a pas encore de code. – Maks

+0

Que veut dire "objet a sa propre valeur"? – Johnsyweb

Répondre

1

Je vous suggère de vous itérer sur vos objets, et rappelez-vous la dernière occurrence d'un type Lin ou Ptp (peu importe lesquelles ... :)):

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     

ou quelque chose comme ça ...

2

Comme je suis un débutant en Python, mes pensées sont mélangées maintenant et je ne peux pas trouver l'algorithme approprié.

Si vous essayez de trouver un algorithme approprié , un peu en arrière. Oubliez Python (C++, Fortran, Logo, Awk, etc ...) et pensez au problème que vous essayez de résoudre. Essayez d'écrire un pseudocode sur papier. De votre pseudo-code, le Python devrait devenir plus apparent et toutes les difficultés techniques peuvent être posées comme des questions plus spécifiques sur StackOverflow (par exemple) ou posées à vos collègues.

+0

A fait cela et vous pouvez le voir sur la page – Maks

+1

Ce n'est même pas proche de suffisamment de détails. Continue à penser. –

0

J'utiliserais quelque chose appelé finite-state machine ou FSM pour parcourir les objets API. Comme vous rencontrez les différents types et les propriétés associées, vous pouvez stocker des informations sur ce qui a été vu dans « l'état » du FSM qui détermine aussi ce qui se passe quand on se produit ou est rencontré le prochain « événement » (les articles que vous itérez). Les informations collectées peuvent être produites en fonction des besoins (c'est-à-dire lorsqu'un certain état est atteint)

Les FSM sont un concept assez simple pour se pencher et programmer (dans presque toutes les langues) et très utile pour ce type de problème.