Search code examples
generatorpython-3.6pascals-triangle

Missing print task when generator is invoked


I have written the following code to produce pascal-triangle like pattern for three different heights. Each time, a different character is used to get the pattern. I am able to get the ones with '*' and '&', but the second call for printing with '=' never gets invoked. So, the corresponding pattern is missing on the screen. Tried to debug by interleaving input() statement between the three calls, but of no avail. Please help.

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, '&'])

Solution

  • So you can just use this fuction as generator without initial values.

    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))
    
        while True:
            pattern_values = yield pattern_values
            draw(pattern_values[0], pattern_values[1])
    
    pattern_series = draw_triangle()
    next(pattern_series)
    pattern_series.send([10, '*'])
    pattern_series.send([12, '=']) # This does not produce any output
    pattern_series.send([14, '&'])