python - 尝试使用 python 实现帕斯卡三角形时出现问题
问题描述
我试图在 python 中练习生成器来实现 Pascal 的三角形。这是我的代码。
def triangles():
k = 1
l = [1,]
while True:
if(k == 1):
k += 1
yield(l)
elif(k == 2):
k += 1
l.append(1)
yield(l)
else:
mid = l.copy()
for i in range(1,k-1):
a = l[i-1] + l[i]
mid[i] = a
mid.append(1)
l = mid
k += 1
yield(mid)
当我做这样的事情时,一开始一切看起来都很好。这是测试代码。
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
print(t)
if n == 10:
break
print(results)
这是输出。
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[[1, 1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]
应该是输出中的results
前 10 行,这也是生成器每次运行的输出triangles
。但是,第一个元素results
不是[1],而是[1,1]。我真的很困惑。当我创建一个列表 [[1]] 并将其附加到 [1,1] 时,我得到了 [[1], [1,1]]。一切看起来都很好。我不知道问题出在哪里。
解决方案
您实际上不需要函数elif
中的部分triangle
:
def triangles():
k = 1
l = [1]
while True:
if(k == 1):
k += 1
yield(l)
else:
mid = l.copy()
for i in range(1,k-1):
a = l[i-1] + l[i]
mid[i] = a
mid.append(1)
l = mid
k += 1
yield(mid)
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
print(results)
推荐阅读
- thread-safety - 跨线程的句子阻塞?
- javascript - DISpatch 在 React Redux 中没有触发
- python - 如何获取用户输入,而不是将其转换为字符串数据类型?
- deep-learning - 比较两个分割图预测
- swift - 在快速发送消息时创建与 PPT 通信所需的 CFMessagePort 时出错
- javascript - 为什么我必须在 jQuery 中为元素和 .files 方法提供索引才能访问值?
- android - 我正在尝试使用 Firebase 播放视频,但它显示 DefaultHttpDataSourceFactory 已弃用
- python - 在指定数量的列中,找出每行中具有前 3 个最大值的列
- scala - Akka:Websocket 处理程序失败,无法订阅关闭的发布者
- javascript - 如何从带有变量的文件中选择特定的导出?