में लघु पथ एल्गोरिदम के लिए कार्यात्मक समाधान मैं Learn You Some Erlang for Great Good! पढ़ रहा हूं और दिलचस्प पहेली पाई। मैंने इसे पायथन में सबसे कार्यात्मक तरीके से लागू करने का निर्णय लिया। पायथन
कृपया मेरे कोड देखें:
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 = []' से सावधान रहें। आप इसे एक खाली सूची में सेट कर रहे हैं जो कि परिवर्तनीय है, और डिफ़ॉल्ट तर्क मानों का फ़ंक्शन परिभाषा समय पर केवल एक बार मूल्यांकन किया जाता है, इसलिए फ़ंक्शन के अंदर इसे संशोधित करने से उस फ़ंक्शन के बाद की सभी कॉल प्रभावित हो जाएंगी। फ़ंक्शन की पहली पंक्ति में एक प्रिंट स्टेटमेंट दें और इसे कई बार कॉल करें और आप देखेंगे कि मेरा क्या मतलब है। – fips