インタビューでは、私は最近次のような質問をしています:2ノードが接続されているかどうかを示す再帰関数を作成しなければなりません。どのように私は下のコードを動作させることができますか? a、b、c 'を参照渡しする方法はありますか?'というようにインスタンス化されると、これはcheck_connectionを呼び出すときに効果的です。 Nodeは変更可能なオブジェクトなので、参照であるかのように動作するはずですが、 'NoneType is iterable'というエラーがあります。どんな提案も感謝しています。2つのノードが再帰関数で接続されているかどうかをチェックする方法
class Node():
def __init__(self, neighbours):
self.neighbours=neighbours
def return_neighbours(self):
return self.neighbours
def check_connection(first, second):
connections=first.return_neighbours()
for conection in connections:
if second in conection:
return True
else:
check_connection(conection,second)
a=None
b=None
c=None
a=Node(neighbours=[c])
b=Node(neighbours=[c])
c=Node(neighbours=[a,b])
check_connection(a,c)
あなたは再帰的に '他にcheck_connection''を呼び出すとき: 'ブロック、あなたはその値を_returning_ていません。あなたはそれを呼び出した後に戻り値を返すだけです。つまり、関数には 'return'文が全くありません。つまり、デフォルトで' None'を返します。 –
それは再帰的な関数なので、それは問題だとは思わない。 – Nickpick
'check_connection'がその結果をどのように通知するのかは不明です。 2番目のノードがネイバーリストにある場合は 'True'を返します。したがって、これは常に' True'または 'False'を返すことを意味します。しかし、2番目のノードがネイバーリストにない場合は何も返しません(したがって 'None')、スクリプトの最後に呼び出されたときには戻り値もキャプチャされません。その結果をアナウンスする関数(おそらくあなたが残した 'print'ステートメント?) –