Jump It Number Game - Python
我正在尝试创建一个简单的"跳转"游戏,它应该把一行中的数字(从文件中获得的输入)取出来,然后找到最便宜的路径到达终点。它将位置1和位置2中的数字进行比较,找出哪一个较小,然后将其添加到总"成本"中,然后继续到下两个。
因此,对于0 3 80 6 57 10号线,最便宜的路线是3+6+10,总共19条。当前我得到的错误是"索引超出范围",我如何修复此错误?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def shouldJump(A): cost = [] for line in A[0]: if (A[1] > A[2]): cost.append(A[1]) shouldJump(A[2:]) elif(A[1] < A[2]): cost.append(A[2]) shouldJump(A[2:]) elif(A[0]==''): shouldJump(A[1][1:]) print(cost, end=' ') def main(): # This opens the file in read mode filename = open('input.dat', 'r') # Read in all the lines of the file into a list of lines linesList = filename.readlines() rows = [[int(n) for n in row.split()] for row in linesList] myData = [[int(val) for val in line.split()] for line in linesList[1:]] shouldJump(myData) main() |
这里有一个用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def shouldJump(A,i,n): if i>n-1: return 0 elif i+1>n-1: return A[i] else: if A[i]<A[i+1]: return A[i] + shouldJump(A,i+2,n) else: return A[i+1] + shouldJump(A,i+2,n) A = [[0,3,80,6,57,10],[0,1,5,7,2]] cost = [] for line in A: cost.append(shouldJump(line,1,len(line))) print cost |
。
输出:
希望有帮助!!!!
您可以通过一行列表理解来实现这一点(不是递归的;使用递归的要求是在后面添加的,咕哝着):
1 2 | min_cost = sum(min(pair) for pair in zip(A[::2], A[1::2])) 16 |
号
如果你想要"最小路径"的话:
1 2 | min_route = [min(pair) for pair in zip(A[::2], A[1::2])] [0, 6, 10] |
其中"pairs"习语取自单个列表中的pairs
这是一个简单的方法
1 2 3 | cost = 0 for pair in izip_longest(fillvalue=max(A) + 1, *[iter(A)] * 2): cost += min(pair) |
参见https://docs.python.org/2/library/itertools.html配方中的