1

2 番目の再帰問題。再帰関数の値に一意の ID を割り当てる必要があります。

各フォルダーにアイテムまたは他のフォルダーを含めることができるフォルダー構造を考えてみてください。ただし、それぞれに一意の「ID」が必要です。

Python の再帰関数ではグローバル変数を使用できないため、呼び出しごとに id をインクリメントすると考えました。しかし、私はこれ以上間違っていませんでした。次の状況を考えてください。

1 - フォルダ

2- フォルダ

3 - アイテム

4 - アイテム

2 - フォルダ

再帰の仕組みが原因で、id が 2 回割り当てられ、チェックする方法がありません。どうすればこれを行うことができますか?(私はpythonを使用しています。インクリメントする変数「uniqueid」があるたびに、エラーが発生します:

割り当て前に参照されたローカル変数「uniqueid」

) 私のコード: make_link_item は文字列を返すだけです。

def build_xml(node,depth,itemid):
    #if 'Children' in node:
        #print colleges
    depth += 1
    for child in node['Children']:
        itemid += 1
        print ("  " * (depth - 1)) + "<item identifier=\"%s\" identifierref=\"%s\">" % (("itm" + ("%05d" % itemid)),("res" + ("%05d" % itemid)))
        print ("  " * depth) + "<title>%s</title>" % child['Name'].encode('utf-8')
        build_xml(child,depth,itemid)
        print ("  " * (depth - 1)) + "</item>"
    lectures = getlectures(node['Id'])
    if lectures:
        build_lectures(lectures,itemid,itemid)

def build_lectures(lectures,itemid,parentid):
    for x in range(len(lectures)):
        itemid += 1
        if x % 2 == 0:
            print "<item identifier=\"%s\" identifierref=\"%s\">" % (("itm" + ("%05d" % itemid)),("res" + ("%05d" % itemid)))
            print "<title>" + lectures[x].encode('utf-8') + "</title>"
            print "</item>"
        else:
            make_link_item(lectures[x-1].encode('utf-8'),lectures[x].encode('utf-8'),itemid,parentid)

ありがとう、

マット

4

3 に答える 3

1

質問をお見逃しなく。

class Builderxmlアーボレッセンスを構築するためのオブジェクトであるaを使用できます。クラスにはメンバーincrementがいます。メンバーは、新しいアイテムに出会う​​たびに1つずつ増えていきます。このように、2つの同じIDはありません。

class Builder:

   def __init__(self):
        self.increment = 0

   #other methods you need
于 2013-01-31T21:48:20.500 に答える
0

各 build_xml 呼び出しで、その子の最大識別子を返すことができます。次に、次のノードをその id + 1 に設定できます。次のようなものです。

def build_xml(node,depth,itemid):
    depth += 1
    for child in node['Children']:
        itemid += 1
        print ("  " * (depth - 1)) + "<item identifier=\"%s\" identifierref=\"%s\">" % (("itm" + ("%05d" % itemid)),("res" + ("%05d" % itemid)))
        print ("  " * depth) + "<title>%s</title>" % child['Name'].encode('utf-8')
        itemid = build_xml(child,depth,itemid)
        print ("  " * (depth - 1)) + "</item>"
    lectures = getlectures(node['Id'])
    if lectures:
        build_lectures(lectures,itemid,itemid)
    return itemid
于 2013-02-01T14:38:32.523 に答える