0

もう少し簡単にしましょう。
コード:

level3 = {'a':'aa'}                                                             
level2 = {'b':level3, 'd':level3}                                               
level1 = {'j':level2, 'k':level2}                                               

def print_rec(node = None):                                                 
    if node is None:                                                            
        node = level1                                                           
    if node == 'aa':                                                            
        return                                                                  
    for key, successor in node.items():                                         
        print(key,":",node.get(key))                                            
        print_rec(successor)                                                

print_rec()

出力:

k : {'d': {'a': 'aa'}, 'b': {'a': 'aa'}}
d : {'a': 'aa'}
a : aa
b : None
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    print_rec(level1)
  File "test.py", line 11, in print_rec
    print_rec(node)
  File "test.py", line 11, in print_rec
    print_rec(node)
  File "test.py", line 8, in print_rec
    for key in node:
TypeError: 'NoneType' object is not iterable

node = node.get(key) は、キーがノードにある場合にのみ実行されると思います。では、なぜ新しいノードが NoneType を取得するのでしょうか? 誰でも助けることができますか?

4

1 に答える 1

4

nodefor ループでは、名前を 2 つの異なるものに使用しているようです。

for key in node:                                                            
    print(key,":",node.get(key))                                            
    node = node.get(key)                                                    
    print_rec(node)

最初の反復では、 の値を変更しますnode。2 回目の繰り返しではnode.get(key)、新しい を使用してnodeいますが、元の を使用したいと考えていますnode

これは役立つはずです:

for key in node:
    print(key,":",node.get(key))
    successor = node.get(key)
    print_rec(successor)

次のようにさらに簡潔に書くことができます。

for key, successor in node.items():
    print(key,":",successor)
    print_rec(successor)
于 2013-08-27T15:04:36.630 に答える