首页 > 解决方案 > python, 练习, for 循环

问题描述

def drawTriangle(height):

    for i in range(1, height+1):

        for j in range(1, height+1-i ):  # for space
            print(" ", end = "")

        for j in range(1, i+1): # for increasing numbers
            print(j, end = "")

        for j in range(i-1, 0, -1 ):   # for decreasing numbers
            print(j, end = "")
           # if i == height:
            #    print(j, end = "")
        print() # for new lines

        for j in range(1, i+1):
            if i == height:
                print(j, end = "")
                sum = j+j
                print(sum)
            else:
                print("", end = "")
        for j in range(i-1, 0 , -1):
            if i == height:
                print(j, end = "")
            else:
                print("", end = "")

drawTriangle(7)

我怎样才能找到这个三角形的最后一行的总和?您的函数必须返回三角形最后一行的所有整数的总和。例如

高度 = 4 时为 16,高度 = 2 时为 4,高度 = 7 时为 49。您的函数必须使用另一个名为 get_row 的函数来确定要打印的行。此函数必须获取行高并返回必要的行。例如,row_height=1 应返回“1”,row_height=2 应返回“1 2 1”,row_height=5 应返回“1 2 3 4 5 4 3 2 1”。

标签: pythonloopsfor-loop

解决方案


正如评论中提到的,您的方法太复杂了,而且有点矫枉过正。
您还遗漏了问题陈述中的关键步骤,“您的函数必须使用另一个名为 get_row 的函数来确定要打印的行。”

不要计算sum循环内部,而是首先创建整行,并且只有在到达三角形的最后一行(即“高度”)时,才计算该行的总和。

这是一个简化的方法,带有注释来解释一些逻辑:

def drawTriangle(height):
    for step in range(1,height+1):
        row = get_row(step)
        if step == height:
            print(sum(row))

def get_row(step):
    row = []
    # start building the row of integers 
    # from 1 up to this step height
    # e.g. [1,2,3,4,5,6,7]
    for i in range(1,step+1):
        row.append(i)
    # then append integers from this height, 
    # e.g. 7 (to avoid duplicate from previous loop) down to 1
    for i in reversed(range(1, step)):
        row.append(i)
    return row

drawTriangle(7)

输入三角形的最后一行7产生[1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1],其总和作为输出返回:

49

注意:如评论中所述,通过“第 N 行的总和为 N*N”确认这是有道理的:7 x 7 = 49


推荐阅读