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

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

Вложенные циклы — это как-то «фе». Вот бы в однострочечники всё перевести — было бы крайне интересно и поучительно посмотреть. А это 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)]))


И так далее…
[str(i)] не нужно делать список.
print('\n'.join([' '.join(str(i) * i) for i in range(6)])) так работает

Но IMO так будет читабельнее:
for x in range(6):
  print(' '.join(str(x) * x))

Вы правы. Идея была в том, чтобы создавать список один раз.
Можно тогда так, но получается так себе:
rows = 6
for x in range(rows):
  print(' '.join([str(x) for _ in range(rows)]))
for x in range(1, 6):
    print((str(x) + ' ') * x)
for x in range(6):
  print(f'{x} ' * x)
Все примеры написаны с стиле C. Индексы, лишние циклы. Это плохие (недостаточно хорошие) примеры кода на Python.
поясните, пожалуйста, свою мысль примерами
Примеры писал человек, который не умеет писать на питоне:
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(" ")

Чему учит приведенный пример — непонятно.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.