2013-09-19 3 views
3

Я изо всех сил пытаюсь найти эффективный способ их преобразования для циклов в рабочий набор в то время как петли. Какие-либо предложения? Я использую 2.7Преобразование для циклов while while в python

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

Благодарим за помощь!

+8

Почему вы хотите конвертировать? для лучше, чем в то время как –

+1

Вы также можете использовать '*' для строк: 'print 'T' * 4 # TTTT' –

+0

также вы можете использовать' xrange' вместо 'range', может быть немного более эффективным – Claudiu

ответ

5

Это как это:

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

Вот как я это сделал. Например, давайте преобразуем эту строку:

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

Первый шаг: создать переменную итерации и инициализировать его в исходном значении диапазона:

row = 1 

Второй шаг: преобразование конечное значение диапазона в условие цикла, и осторожен с индексами:

while row < height+1: 

Наконец, не забудьте заранее цикл приращения переменной итерации:

row += 1 

Собираем все вместе:

row = 1 
while row < height+1: 
    row += 1 
+0

Хороший ответ и спасибо для подробного объяснения. Теперь я понимаю это намного лучше! –

+0

@GregJennings Также вы можете проголосовать за любой полезный вопрос/ответ проверить [права пользователя] (http://stackoverflow.com/help/privileges) –

1

Вы можете избавиться от внутреннего контура с оператором струна умножения (*):

def printTTriangle(height): 
j = 1 
while j <= height: 
    print 'T' * j + '\n ' 
    j += 1 
2

Вы можете упростить его и использовать только одно время петля:

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

И если вы re not obsessed with while loops, вот один лайнер:

def printTTriangle(height): 
    print "\n".join(['T '*row for row in range(1, height+1)]) 
Смежные вопросы