3

I am struggling to find an efficient way to convert these for loops to a working set of while loops. Any Suggestions? I am using 2.7

def printTTriangle(height):
 for row in range(1,height+1):
    # print row T's
    for col in range(1,row+1):
        print 'T', 
    print

Thank you all for your help!

Óscar López
  • 232,561
  • 37
  • 312
  • 386
Greg Jennings
  • 53
  • 1
  • 2
  • 6

3 Answers3

7

It's like this:

def printTTriangle(height):
    row = 1
    while row < height+1:
        col = 1
        while col < row+1:
            print 'T', 
            col += 1
        print
        row += 1

Here's how I did it. For example, let's convert this line:

for row in range(1, height+1):

First step: create an iteration variable and initialize it in the starting value of the range:

row = 1

Second step: transform the ending value of the range into the loop condition, and careful with the indexes:

while row < height+1:

Finally, don't forget to advance the loop incrementing the iteration variable:

row += 1

Putting it all together:

row = 1
while row < height+1:
    row += 1
Óscar López
  • 232,561
  • 37
  • 312
  • 386
2

You can simplify it and just use one while loop:

def printTTriangle(height):
    row = 1
    while row <= height:
        print 'T '*row
        row += 1

AND if you are not obsessed with while loops, here is a one liner:

def printTTriangle(height):
    print "\n".join(['T '*row for row in range(1, height+1)])
Anurag Uniyal
  • 85,954
  • 40
  • 175
  • 219
1

You can get rid of the inner loop with string multiplication operator (*) :

def printTTriangle(height):
 j = 1
 while j <= height:
     print 'T' * j + '\n '
     j += 1
Grijesh Chauhan
  • 57,103
  • 20
  • 141
  • 208
leeladam
  • 1,748
  • 10
  • 15