杨慧三角的定义如下:
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看到循环要想办法合并到一行,这样虽然可读性变低,但代码看上去更简洁,优雅。