繁体   English   中英

递归帕斯卡三角形布局

[英]Recursive Pascals Triangle Layout

所以我设法让 Pascals Triangle 在打印的数字方面成功打印,但是,我无法使用以下方法获得正确的格式:

n = int(input("Enter value of n: "))


def printPascal(n):
    if n <= 0:      #must be positive int
        return "N must be greater than 0"
    elif n == 1:    #first row is 1, so if only 1 line is wanted, output always 1
        return [[1]]
    else:
        next_row = [1] #each line begins with 1              
        outcome = printPascal(n-1)
        prev_row = outcome[-1]
        for i in range(len(prev_row)-1):    #-1 from length as using index
            next_row.append(prev_row[i] + prev_row[i+1])
        next_row += [1]  
        outcome.append(next_row)     #add result of next row to outcome to print
    return outcome


print(printPascal(n))

这打印为:

Enter value of n: 6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]

这是正确的,但是我希望它被格式化为直角三角形,例如:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

我的问题是,我是这种语言的新手,无法确定在我的代码中放置拆分等的位置,以便能够像这样打印。 任何帮助或朝着正确方向轻推将不胜感激。 谢谢。

你想使用str.join()函数,它打印出列表中由字符串分隔的所有元素:

>>> L = printPascal(6)
>>> for row in L:
...     print ' '.join(map(str, row))
... 
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

' '.join(list)表示您要打印出列表中由空格 ( ' ' ) 分隔的每个元素。

但是,列表中的每个元素都必须是字符串才能使join函数起作用。 你的是整数。 为了解决这个问题,我通过执行map(str, row)将所有整数更改为字符串。 这相当于:

new_list = []
for item in row:
    new_list.append(str(item))

或者作为列表理解:

[str(item) for item in row]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM