गणना नहीं कर सकते मैं निम्नलिखित शब्दकोश है:रिकर्सिव अजगर समारोह - बढ़त मामले
>>> for key, details in relationships.items():
print key, details[2]
('INVOICE', 'INVOICE') 1
('INVOICE', 'ORDER2') 0.50000000
('INVOICE', 'ORDER1') 0.01536410
('ORDER1', 'ORDER2') 0.05023163
('INVOICE', 'ORDER4') 0.00573215
('ORDER4', 'ORDER1') 0.08777898
('ORDER4', 'ORDER3') 0.01674388
यह निम्न पदानुक्रम बनाता है:
INVOICE -> ORDER2
-> ORDER1 -> ORDER2
-> ORDER4 -> ORDER1 -> ORDER2
-> ORDER3
जहां प्रत्येक तीर details[2]
के मूल्य का प्रतिनिधित्व करता। चालान के लिए प्रत्येक आदेश के अंतिम 'रिश्ते' की गणना की जानी चाहिए। उम्मीद मान:
> ORDER1: 0.01586726 (0.0153641 + 0.0877898 x 0.00573215)
> ORDER2: 0.50079704 (0.5 + 0.05023163 x 0.0153641 + 0.05023163 x 0.0877898 x 0.00573215)
> ORDER3: 0.00009598 (0.01674388 x 0.00573215)
> ORDER4: 0.00573215 (0.00573215)
मैं एक पुनरावर्ती समारोह में निम्नलिखित का प्रयास किया है:
for invoice in final_relationships.keys():
calculate(invoice, invoice, Decimal(1))
def calculate(orig_ord, curr_ord, contribution):
for rel_ID, rel_details in relationships.items():
if rel_ID[1] == curr_ord:
if orig_ord == curr_ord:
contribution = Decimal(1)
if rel_ID[0] != rel_ID[1]:
contribution = (contribution * rel_details[2]).quantize(Decimal('0.00000001'), rounding=ROUND_HALF_UP)
calculate(orig_ord, rel_ID[0], contribution)
else:
final_relationships[orig_ord] += contribution
contribution = Decimal(0)
यह सही ढंग से सभी स्थितियों एक को छोड़कर, ORDER2 के लिए गणना करता है। के बाद से योगदान 0.05023163 के बजाय 0.00077176 में शुरू होता है, क्योंकि के लिए यात्रा ('ORDER1', 'ORDER2') (लाइन 2 के बाद) दूसरी बार ऐसा नहीं होता है
------- ORDER2
1 # rel_ID, curr_ord, rel_details[2], contribution
2 ('ORDER1', 'ORDER2') ORDER2 0.05023163 1
3 ('INVOICE', 'ORDER1') ORDER1 0.01536410 0.05023163
4 ('INVOICE', 'INVOICE') INVOICE 1 0.00077176
5 # final
6 0.00077176
7 ('ORDER4', 'ORDER1') ORDER1 0.08777898 0.00077176
8 ('INVOICE', 'ORDER4') ORDER4 0.00573215 0.00006774
9 ('INVOICE', 'INVOICE') INVOICE 1 3.9E-7
10 # final
11 0.00077215
12 ('INVOICE', 'ORDER2') ORDER2 0.50000000 0.05023163
13 ('INVOICE', 'INVOICE') INVOICE 1 0.50000000
14 # final
15 0.50077215
मुद्दा, लाइन 7 पर है। यह संबंध INVOICE -> ORDER4 -> ORDER1 -> ORDER2
है।
मैं फ़ंक्शन को कैसे ठीक कर सकता हूं? अगर 'orig_ord' संसाधित नहीं किया गया था, तो मैंने योगदान को रीसेट करने का प्रयास किया, लेकिन यह पता नहीं लगा कि इसे कहां रखा जाए। अगर पूरी चीज गूंगा है, तो मैं फिर से लिखने के लिए खुला हूं, जब तक मुझे नौकरी मिलती है।