company_banner

Python: 18 задач на вывод символов по заданному шаблону

Автор оригинала: Shriram K
  • Перевод
Подготовка к техническому собеседованию по Python — нелёгкая задача. На таком собеседовании вам, вполне возможно, встретятся задачи на вывод символов по заданным шаблонам. Если вы хотите научиться решать такие задачи — вам может пригодиться подборка способов их решения, приведённая в этом материале.



Здесь продемонстрировано 18 примеров кода. Начинающие программисты вполне могут проработать всё по порядку, а опытные могут разобраться именно с тем, что им нужно. Главное — понять, как устроен тот или иной пример. Отсутствие чёткого понимания того, что происходит в программах, способно сыграть злую шутку с тем, кто, например, заучив фрагмент кода и воспроизведя его на собеседовании, попытается объяснить то, как именно этот код работает. А тех, кто проводит собеседование, часто интересуют именно такие вот разъяснения.

1. Простой числовой треугольник


Желаемый результат:

1  
2 2  
3 3 3  
4 4 4 4  
5 5 5 5 5

Код:

rows = 6
for num in range(rows):
    for i in range(num):
        print(num, end=" ") # вывод числа
    # вывод пустой строки после каждой строки с числами для правильного отображения шаблона
    print(" ")

2. Обратный числовой треугольник


Желаемый результат:

1 1 1 1 1 
2 2 2 2 
3 3 3 
4 4 
5

Код:

rows = 5
b = 0
for i in range(rows, 0, -1):
    b += 1
    for j in range(1, i + 1):
        print(b, end=' ')
    print('\r')

3. Полупирамида из чисел


Желаемый результат:

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5

Код:

rows = 5
for row in range(1, rows+1):
    for column in range(1, row + 1):
        print(column, end=' ')
    print("")

4. Обратная пирамида из уменьшающихся чисел


Желаемый результат:

5 5 5 5 5 
4 4 4 4 
3 3 3 
2 2 
1

Код:

rows = 5
for i in range(rows, 0, -1):
    num = i
    for j in range(0, i):
        print(num, end=' ')
    print("\r")

5. Обратная пирамида, все элементы которой представлены одним и тем же числом


Желаемый результат:

5 5 5 5 5 
5 5 5 5 
5 5 5 
5 5 
5

Код:

rows = 5
num = rows
for i in range(rows, 0, -1):
    for j in range(0, i):
        print(num, end=' ')
    print('\r')

6. Пирамида из чисел, расположенных в обратном порядке


Желаемый результат:

1 
2 1 
3 2 1 
4 3 2 1 
5 4 3 2 1

Код:

rows = 6
for row in range(1, rows):
    for column in range(row, 0, -1):
        print(column, end=' ')
    print("")

7. Обратная полупирамида из чисел


Желаемый результат:

0 1 2 3 4 5 
0 1 2 3 4 
0 1 2 3 
0 1 2 
0 1

Код:

rows = 5
for i in range(rows, 0, -1):
    for j in range(0, i + 1):
        print(j, end=' ')
    print('\r')

8. Пирамида из натуральных чисел меньше 10


Желаемый результат:

1 
2 3 4 
5 6 7 8 9

Код:

currentNumber = 1
stop = 2
rows = 3 # Количество строк, из которых состоит пирамида
for i in range(rows):
    for column in range(1, stop):
        print(currentNumber, end=' ')
        currentNumber += 1
    print("")
    stop += 2

9. Пирамида из чисел от 10, расположенных в обратном порядке


Желаемый результат:

1 
3 2 
6 5 4 
10 9 8 7

Код:

start = 1
stop = 2
currentNumber = stop
for row in range(2, 6):
    for col in range(start, stop):
        currentNumber -= 1
        print(currentNumber, end=' ')
    print("")
    start = stop
    stop += row
    currentNumber = stop

10. Пирамида из определённых наборов цифр


Желаемый результат:

1 
1 2 1 
1 2 3 2 1 
1 2 3 4 3 2 1 
1 2 3 4 5 4 3 2 1 

Код:

rows = 6
for i in range(1, rows + 1):
    for j in range(1, i - 1):
        print(j, end=" ")
    for j in range(i - 1, 0, -1):
        print(j, end=" ")
    print()

11. Обратная пирамида из связанных чисел


Желаемый результат:

5 4 3 2 1 1 2 3 4 5 
5 4 3 2 2 3 4 5 
5 4 3 3 4 5 
5 4 4 5 
5 5

Код:

rows = 6
for i in range(0, rows):
    for j in range(rows - 1, i, -1):
        print(j, '', end='')
    for l in range(i):
        print('', end='')
    for k in range(i + 1, rows):
        print(k, '', end='')
    print('\n')

12. Пирамида из чётных чисел


Желаемый результат:

10 
10 8 
10 8 6 
10 8 6 4 
10 8 6 4 2

Код:

rows = 5
LastEvenNumber = 2 * rows
evenNumber = LastEvenNumber
for i in range(1, rows+1):
    evenNumber = LastEvenNumber
    for j in range(i):
        print(evenNumber, end=' ')
        evenNumber -= 2
    print("\r")

13. Пирамида из наборов чисел


Желаемый результат:

0 
0 1 
0 2 4 
0 3 6 9 
0 4 8 12 16 
0 5 10 15 20 25 
0 6 12 18 24 30 36

Код:

rows = 7
for i in range(0, rows):
    for j in range(0, i + 1):
        print(i * j, end=' ')
    print()

14. Пирамида, в каждой строке которой выводятся разные числа


Желаемый результат:

1 
3 3 
5 5 5 
7 7 7 7 
9 9 9 9 9

Код:

rows = 5
i = 1
while i <= rows:
    j = 1
    while j <= i:
        print((i * 2 - 1), end=" ")
        j = j + 1
    i = i + 1
    print()

15. Зеркально отражённая пирамида из чисел (прямоугольный числовой треугольник)


Желаемый результат:

          1 
        1 2 
      1 2 3 
    1 2 3 4 
  1 2 3 4 5

Код:

rows = 6
for row in range(1, rows):
    num = 1
    for j in range(rows, 0, -1):
        if j > row:
            print(" ", end=' ')
        else:
            print(num, end=' ')
            num += 1
    print("")

16. Равносторонний треугольник из символов *


Желаемый результат:

            *  
           * *  
          * * *  
         * * * *  
        * * * * *  
       * * * * * *  
      * * * * * * *

Код:

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(" ")

17. Перевёрнутый треугольник из символов *


Желаемый результат:

        * * * * * * 
         * * * * * 
          * * * * 
           * * * 
            * * 
             *

Код:

rows = 5
k = 2 * rows - 2
for i in range(rows, -1, -1):
    for j in range(k, 0, -1):
        print(end=" ")
    k = k + 1
    for j in range(0, i + 1):
        print("*", end=" ")
    print("")

18. Пирамида из символов *


Желаемый результат:

* 
* * 
* * * 
* * * * 
* * * * *

Код:

rows = 5
for i in range(0, rows):
    for j in range(0, i + 1):
        print("*", end=' ')
    print("\r")

Какие задачи вы посоветовали бы прорешать тем, кто готовится к собеседованию по Python?

RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

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

    +6
    Вложенные циклы — это как-то «фе». Вот бы в однострочечники всё перевести — было бы крайне интересно и поучительно посмотреть. А это 5-6 класс, половина сайтов по изучению Питона этим забита до отказа. Когда начинаешь вложенными циклами обрабатывать реальные массивы данных на Питоне, то дело всё затягивается на часы, дни и недели.
      +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)]))
      


      И так далее…
        +5
        [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))
        

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


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

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

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

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

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

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

                Самое читаемое