私はLearn You Some Erlang for Great Good!を読んで興味深いパズルを見つけました。私はPythonで最も機能的な方法で実装することに決めました。 Pythonのショートパスアルゴリズムのための機能的解答
私のコードを参照してください:
def open_file():
file_source = open('resource/path.txt', 'r') # contains 50\n 10\n 30\n 5\n 90\n 20\n 40\n 2\n 25\n 10\n 8\n 0\n
return file_source
def get_path_tuple(file_source, pathList=[]):
try:
node = int(next(file_source)), int(next(file_source)), int(next(file_source))
pathList.append(node)
get_path_tuple(file_source, pathList)
except StopIteration:
pass
return pathList
def short_step(pathList, n, stepList):
try:
stepA = pathList[n][0] + pathList[n][1]
stepB = pathList[n][1] + pathList[n][2]
stepList.append(min([stepA, stepB]))
short_step(pathList, n+1, stepList)
except IndexError:
pass
return stepList
pathList = get_path_tuple(open_file(), [])
pathList.reverse()
print(short_step(pathList, 0, []))
をしかし、私は問題にヒット、私は現在の場所の状態を維持する方法がわかりません。結果は[8, 27, 95, 40]
です。 コードを修正するのを助けてください。
「get_path_tuple」の 'pathList = []'に注意してください。変更可能な空のリストに設定すると、デフォルトの引数値は関数定義時に一度だけ評価されるので、関数内でそれを変更すると、それ以降のすべての関数呼び出しに影響します。関数の最初の行にprintステートメントを置き、何度も呼び出すと、何を意味するのかがわかります。 – fips