杨辉三角 Python

杨慧三角的定义如下:

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

我还不太适应Python的思维,我写的代码如下

def triangles():
    row = []
    n = 0

    while(1):
        col = []
        if n == 0:
            col.append(1)   # 第一行为[1]
        else:
            l = row[n - 1] # 获取前一行
            col.append(1)   # 首尾各是1
            for i in range(1, n): # n 比每行的个数小1
                col.append(l[i - 1] + l[i]) # 杨辉三角中间的每个数都等于上一行的相对位置的数之和
            col.append(1)
        row.append(col)
        n = n + 1
        yield(col)

# 为了看到结果的测试代码
n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

我在网上看到别人写的比我好的思路:

def triangles():
    L=[1]
    for i in range(0,11):
        yield L
        # 直接由上一行的L生成下一行的L
        # [L[j]+L[j+1] for j in range(len(L)-1)]
        # 用来生成中间数字
        L=[1]+[L[j]+L[j+1] for j in range(len(L)-1)]+[1]

# 为了看到结果的测试代码
n = 0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

总结: 以后用Python看到循环要想办法合并到一行,这样虽然可读性变低,但代码看上去更简洁,优雅。

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/tom9238/article/details/71054988
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞