【发布时间】:2017-09-22 03:25:53
【问题描述】:
我编写了以下代码来为三种不同的高度生成类似帕斯卡三角形的图案。每次都使用不同的字符来获取模式。我可以得到带有“*”和“&”的那些,但是第二次使用“=”打印的调用永远不会被调用。因此,屏幕上缺少相应的图案。尝试通过在三个调用之间交错 input() 语句进行调试,但无济于事。请帮忙。
def draw_triangle(pattern_values):
def draw(ht, ch):
for i in range(1, ht+1):
print('{txt:^{wid}}'.format(txt=i*(ch+' '),wid=2*ht))
draw(pattern_values[0], pattern_values[1])
yield pattern_values
while True:
pattern_values = yield pattern_values
draw(pattern_values[0], pattern_values[1])
pattern_series = draw_triangle([10, '*'])
next(pattern_series)
pattern_series.send([12, '=']) # This does not produce any output
pattern_series.send([14, '&'])
【问题讨论】:
-
您应该知道 yield 的作用类似于 return。除了一件事:它返回生成器而不是结果。所以你的第一次收益之后的代码永远不会运行。
-
没有。那么,我不应该得到一个印有“&”的三角形。但是,除了带有“*”的开头之外,我确实得到了这个。要无限生成一系列奇数,您可以使用 next 语句,然后使用 send。生成器将有一个简单的产量,然后是一个无限循环内的产量(当 True)来完成此操作。
标签: generator python-3.6 pascals-triangle