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)]))
И так далее…
Все примеры написаны с стиле 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-ой:
Чему учит приведенный пример — непонятно.
Например, 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.
Python: 18 задач на вывод символов по заданному шаблону