0

我正在尝试创建一个三角形,该三角形接受用户输入的值,并且希望从这些值中找到这些输入中的最大路径。我最初问了这个问题以找到最大路线:Finding the Maximum Route in a given input

代码:

def triangle(rows):
    for rownum in range (rows):
        PrintingList = list()
        print ("Row no. %i" % rownum)
        for iteration in range (rownum):
            newValue = input("Please enter the %d number:" %iteration)
            PrintingList.append(int(newValue))
            print()
def routes(rows,current_row=0,start=0):
    for i,num in enumerate(rows[current_row]):
        #gets the index and number of each number in the row
        if abs(i-start) > 1:   # Checks if it is within 1 number radius, if not it skips this one. Use if not (0 <= (i-start) < 2) to check in pyramid
            continue
        if current_row == len(rows) - 1: # We are iterating through the last row so simply yield the number as it has no children
            yield [num]
        else:
            for child in routes(rows,current_row+1,i): #This is not the last row so get all children of this number and yield them
                yield [num] + child


numOfTries = input("Please enter the number of tries:")
Tries = int(numOfTries)
for count in range(Tries):
    numstr= input("Please enter the height:")
    rows = int(numstr)
    triangle(rows)
    routes(triangle)
    max(routes(triangle),key=sum)

输入三角形的所有值后出现的错误:

Traceback (most recent call last):
  File "C:/Users/HP/Desktop/sa1.py", line 25, in <module>
    max(routes(triangle),key=sum)
  File "C:/Users/HP/Desktop/sa1.py", line 10, in routes
    for i,num in enumerate(rows[current_row]): #gets the index and number of each number in the row
TypeError: 'function' object is not subscriptable

我的代码中的错误在哪里?需要一些帮助..谢谢...

4

3 回答 3

2

您正在使用:

routes(triangle)

triangle名称指的是一个函数,该函数作为第一个参数传递rows给 function routes。在函数体中,rows[current_row]产生错误,因为rows它确实是一个函数。

我真的不明白你想做什么。也许您想PrintingList从函数返回triangles并将此结果依次传递给函数routes

于 2012-04-13T13:21:53.567 回答
1

您可能正在尝试获取在函数内部创建的 的值作为函数PrintingList内部的变量。trianglerowsroutes

为了让您的程序以这种方式工作,您必须在三角形函数中添加一个 return 语句 - 也就是说,添加 areturn PrintingList作为最后一个语句 - 并在调用函数时存储此值,并将存储的值传递给routes函数 - 这意味着,你的程序的结尾应该是这样的:

result = triangle(rows)
routes(result)
max(routes(triangle),key=sum)

这将解决这个问题,上面的代码中可能还有其他问题。

于 2012-04-13T13:26:33.000 回答
-3

正如回溯所述,它在第 25 行和第 10 行。它是说该函数不可下标,这是真的,你不能订阅一个函数。但是,您可以订阅:

String:  "x"[2] == "foo"
Tuple:   (2,5,2,7)[3] == 7
List:    [1,2,3,"foo"][3] == "foo"
Dict:    {"a":1, "b":5, "c":5}["a"] == 1
于 2012-04-13T13:23:38.950 回答