Как стать автором
Обновить

Комментарии 16

Вложенные циклы — это как-то «фе». Вот бы в однострочечники всё перевести — было бы крайне интересно и поучительно посмотреть. А это 5-6 класс, половина сайтов по изучению Питона этим забита до отказа. Когда начинаешь вложенными циклами обрабатывать реальные массивы данных на Питоне, то дело всё затягивается на часы, дни и недели.
Как-то это все не слишком идеоматичный Питон. Вообще, я думаю все эти задачи решаются однострочниками.

Например, первая задача решается так
print('\n'.join([' '.join([str(i)] * i) for i in range(6)]))


Вторая так
n = 5
print('\n'.join([' '.join([str(i + 1)] * (n - i)) for i in range(n)]))


И так далее…
НЛО прилетело и опубликовало эту надпись здесь
6 -> 16 и пример развалится.
НЛО прилетело и опубликовало эту надпись здесь
for x in range(1, 6):
    print((str(x) + ' ') * x)
НЛО прилетело и опубликовало эту надпись здесь
поясните, пожалуйста, свою мысль примерами
Примеры писал человек, который не умеет писать на питоне:
size = 7
m = (2 * size) - 2
for i in range(0, size):
    for j in range(0, m):
        print(end=" ")
    m = m - 1 # уменьшение m после каждого прохода цикла
    for j in range(0, i + 1):
        # вывод пирамиды из звёздочек
        print("*", end=' ')
    print(" ")

какието вложенные циклы, счетчики. Один из правильных ответов:
size = 7
for i in range(0, size):
    print(('* ' * i + '*').rjust(size * 2 + i))


Плюс принт — дорогая операция, и вызывать ее на каждый символ просто ошибочно.

Ну вот хотя бы 18-ый пример. Можно переписать так, чтобы сохранить читабельность цикла, а можно и в однострочник завернуть:
def test_18(rows):
    for i in range(1, rows + 1):
        print('* ' * i)
Подготовка к техническому собеседованию по Python — нелёгкая задача.

Судя по этим 18 паззлам — ничего сложного ))

Мало того, что это «C на Python», так и в этих рамках неоптимально.
Например, 2 задача легко получается из 1-ой:
rows=6
for i in range(1, rows):
  for j in range(rows-i):
    print(i, end=" ") # вывод числа
  print(" ")

Чему учит приведенный пример — непонятно.

В зеркальной пирамиде ведь надо учитывать, что числа бывают более-чем-одноразрядные?


                         1
                      1  2
                   1  2  3
                1  2  3  4
              1 2  3  4  5
            1 2 3  4  5  6
          1 2 3 4  5  6  7
        1 2 3 4 5  6  7  8
      1 2 3 4 5 6  7  8  9
    1 2 3 4 5 6 7  8  9 10
  1 2 3 4 5 6 7 8  9 10 11
1 2 3 4 5 6 7 8 9 10 11 12

# по-хорошему, это надо мемоизировать
def width(n):
    return 1 if n < 10 else 2 if n < 100 else 3 if n < 1000 else int(math.log10(n))+1

def number(value, position):
    return '%*d' % (width(position), value)

def space(position):
    return ' ' * width(position)
# по-хорошему, надо найти суммарную отбивку для ряда
# и тоже мемоизировать

# x - номер колонки
# y - номер ряда
# N - размер пирамиды

def row(y, N):
    return ' '.join(
        (space(x) if x+y-N < 1 else number(x+y-N, x))
        for x in range(1, N+1)
    )

def pyramid(N):
    return '\n'.join(
        row(y, N)
        for y in range(1, N+1)
    )

Но без мапы и лямбды скучно же ))


for a in map(lambda x: str(x)*x, range(1, 6)): print(" ".join(a))
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий