Ich lese Learn You Some Erlang for Great Good! und fand interessante Puzzle. Ich habe mich entschlossen, es in Python auf möglichst funktionale Weise zu implementieren. Funktionelle Lösung für Short-Path-Algorithmus in Python
Bitte siehe meinen Code:
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, []))
Aber ich traf in Problem, ich weiß nicht, wie Zustand der aktuellen Position zu halten. Ergebnis ist: [8, 27, 95, 40]
. Könnten Sie bitte helfen, meinen Code zu beheben.
Nur eine kurze Notiz, seien Sie vorsichtig mit diesem 'pathList = []' in Ihrem 'get_path_tuple'. Sie legen sie auf eine leere Liste fest, die veränderbar ist, und Standardargumentwerte werden nur einmal zur Funktionsdefinitionszeit ausgewertet. Daher wirkt sich die Änderung innerhalb der Funktion auf alle nachfolgenden Aufrufe dieser Funktion aus. Setzen Sie eine Druckanweisung in die erste Zeile der Funktion und rufen Sie sie mehrmals auf und Sie werden sehen, was ich meine. – fips