Pull to refresh

Comments 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)]))


И так далее…
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
поясните, пожалуйста, свою мысль примерами
Примеры писал человек, который не умеет писать на питоне:
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))
UFO just landed and posted this here
Sign up to leave a comment.