Sto leggendo Learn You Some Erlang for Great Good! e ho scoperto un interessante puzzle. Ho deciso di implementarlo in Python in un modo più funzionale. Soluzione funzionale per algoritmo di percorso breve in Python
Si prega di vedere il mio codice:
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, []))
Ma mi ha colpito nel problema, non so come mantenere lo stato di posizione corrente. Il risultato è: [8, 27, 95, 40]
. Potrebbe aiutarmi a risolvere il mio codice.
Solo una breve nota, fai attenzione con 'pathList = []' nel tuo 'get_path_tuple'. Lo stai impostando su una lista vuota che è mutabile e i valori degli argomenti predefiniti vengono valutati una sola volta al momento della definizione della funzione, quindi modificarlo all'interno della funzione influirà su tutte le chiamate successive a quella funzione. Metti una dichiarazione di stampa nella prima riga della funzione e chiamala più volte e vedrai cosa intendo. – fips