मेरे पास इस स्ट्रिंग द्वारा दर्शाया गया एक पेड़ है (यह स्क्रैच द्वारा बनाया गया एक निर्णय वृक्ष है): {'इंडेक्स': 1, 'राइट': {'इंडेक्स': 0, 'राइट': 'नो', 'वैल्यू': 'ओवरकास्ट', 'लेफ्ट': 'हां'}, 'वैल्यू': 'हल्का', 'बाएं': {'सूचकांक': 0, 'दाएं': {'अनुक्रमणिका': 0, 'दाएं': 'हां', 'मान': 'घबराहट', 'बाएं': 'हां'} , 'मान': 'बारिश', 'बाएं': {'सूचकांक': 0, 'दाएं': 'हां', 'मान': 'बारिश', 'बाएं': 'हां'}}}

और मैं इसका प्रतिनिधित्व करना चाहता हूं (ग्राफविज़ का उपयोग करके किनारों और नोड्स के साथ)। इसे प्रिंट करने के लिए मैं पायथन में इस फ़ंक्शन का उपयोग करता हूं:

def print_tree(node, depth=0):
    filename = outlook.csv'
    dataset = load_csv(filename)
    columns = dataset[0]
    if isinstance(node, dict):

        print('%s[%s = %s]' % ((depth * ' ', (columns[node['index']]), node['value'])))
        print_tree(node['left'], depth+1)
        print_tree(node['right'], depth+1)
    else:
        print('%s[%s]' % ((depth*' ', node)))

मैं ग्राफ़विज़ से ग्राफ़विज़ आयात डिग्राफ से डिग्राफ का उपयोग करना चाहता हूं

 def createGraph(node):
 dot = Digraph(comment="experiment")
 def graph(node):
  if isinstance(node, dict):
    dot.node(str(id(node)))
    dot.edge(str(id(node)) , str(id(node['right'])))
    graph(node['left'])
    graph(node['right'])
  else:
    dot.node(str(id(node)), str(node))
  dot.render('test-output/roundround5.gv', view=True)
 'test-output/round.gv.pdf'
graph(node)

लेकिन जाहिर है कोड गलत है। क्या कोई मदद कर सकता है?

0
gio 26 फरवरी 2020, 20:30
आप अपने ग्राफ़ में प्रत्येक नोड के लिए एक बिलकुल नई Digraph() वस्तु बना रहे हैं। आपको अपने पुनरावर्ती फ़ंक्शन के बाहर के अंत में, और अंत में प्रतिपादन करने की आवश्यकता है, ताकि यह केवल एक बार हो। साथ ही, आपके ग्राफ़विज़ नोड नामों के रूप में id() नोड्स का उपयोग करने के कारण आपको कुछ समस्याएं हो सकती हैं। यह आपके आंतरिक नोड्स के लिए काम करेगा, लेकिन लीफ नोड्स के लिए जो केवल एक स्ट्रिंग हैं, यह अपरिभाषित है कि उन सभी 'Yes' नोड्स (उदाहरण के लिए) में एक ही आईडी होगी या नहीं।
 – 
jasonharper
26 फरवरी 2020, 20:44
बाइनरी ट्री से डॉट फ़ाइल बनाने का एक उदाहरण यहां दिया गया है - वास्तव में, यह एक ट्रैप है, इसलिए बाइनरी ट्री और बाइनरी हीप का मैशअप: stromberg.dnsalias.org/svn/treap/trunk/m4_treap.m4 । विचारों के लिए इस पर छापा मारने के लिए स्वतंत्र महसूस करें। BTW, एक्सटेंशन ".m4" है, लेकिन यह सिर्फ एक प्रीप्रोसेसर है ताकि मैं एक ही फाइल से शुद्ध अजगर और साइथन उत्पन्न कर सकूं। .py प्राप्त करने के लिए, बस m4 -Dpy=1 < ../m4_treap.m4 > py_treap.py चलाएं
 – 
dstromberg
26 फरवरी 2020, 21:24
आपका कोड "स्पष्ट रूप से गलत" क्यों है? यह आपकी पोस्ट से गायब है इसलिए हो सकता है कि आप संपादित करें और इसे जोड़ना चाहें।
 – 
Jongware
26 फरवरी 2020, 21:25
आप ठीक कह रहे हैं। मैंने अपना कोड संपादित किया लेकिन मुझे हमेशा समस्याएं होती हैं।
 – 
gio
26 फरवरी 2020, 22:09
यदि आप हमें बताएं कि वे समस्याएं क्या हैं, तो हम अधिक प्रभावी ढंग से मदद करने में सक्षम हो सकते हैं।
 – 
RFairey
27 फरवरी 2020, 20:01

1 उत्तर

सबसे बढ़िया उत्तर

आपके कोड ब्लॉक में कुछ सिंटैक्स त्रुटियां हैं, फ़ाइल नाम outlook.csv सही ढंग से उद्धृत नहीं किया गया है, और ग्राफ़िंग ब्लॉक के अंत में एक अतिरिक्त स्ट्रिंग 'test-output/round.gv.pdf' है।

हालांकि मुख्य समस्या यह प्रतीत होती है कि आप graph() पर प्रत्येक कॉल के लिए एक नया Digraph ऑब्जेक्ट बना रहे हैं, और आप ग्राफ़ को बार-बार कॉल कर रहे हैं। इसके बजाय आपको एक Digraph बनाना होगा, और उसे graph को पहली कॉल में पास करना होगा, और फिर ग्राफ़ नोड्स को दोबारा जोड़ना होगा।

क्या आप अपने प्रश्न का थोड़ा विस्तार कर सकते हैं - सिंटैक्स त्रुटियों को संबोधित करें और फिर त्रुटियों या गलत आउटपुट का उदाहरण प्रदान करें जो आप देख रहे हैं?

1
RFairey 27 फरवरी 2020, 13:38