Я пытаюсь создать функцию на Python, которая помогает реализовать и продолжить следующий числовой паттерн

Наткнулся на интересную задачку, у меня есть паттерн:

1
2 4
6 8 10
13 15 17 19

Мне нужно написать функцию, которая реализует и продолжает данный паттерн. Только необходимо это сделать именно используя тот факт, что начиная со 2 строки, следующая строка = предыдущая + 3 и так далее. Мой вариант использования данной особенности:

def print_pattern(row):
    number = 1
    for i in range(1, row + 1):
        number += 1 + (n-1)*3
        for j in range(n):
            print(number + 2 * i, end=' ')
        print()

print_pattern(4)

На данный момент вывод:

2 
6 8 
13 15 17 
23 25 27 29 

Задача в том, чтобы вывод был такой, что и в примере и работал с той же закономерностью дальше, но важный критерий не изменять саму идею моей закономерности:

Первая ступень: Начинаем с “1”.

Вторая ступень: Поднимаемся до “2”. Разница с прошлой ступенью - 1

Третья ступень: Поднимаемся до “6”. Разница с прошлой ступенью - 4

Четвертая ступень: Поднимаемся до “13”. Разница с прошлой ступенью - 7

Разница между первыми числами каждого ряда увеличивается с каждым шагом. 1, 4, 7, 10, 13, 16, 19... (см фото)моя закономерность


Ответы (1 шт):

Автор решения: Nowhere Man

Классический вариант реализации с вложенными циклами:

def p1(row):
    d = 1
    n = 1
    for i in range (1, row + 1):
        for m in range(n, n + i * 2 - 1, 2):
            print(m, end = " ")
        print()
        n += d
        d += 3

Также можно сократить присваивания, избавиться от вложенного цикла и вывести последовательность внутри print:

def p2(row):
    d, n = 1, 1
    for i in range (row):
        print(*range(n, n + i * 2 + 1, 2), sep = " ")
        n, d = n + d, d + 3

Полностью однострочный вариант, с использованием "моржового" присваивания:

def p4(row): n, d = 1, 1; [(print(*range(n, n + 2 * i + 1, 2)), n := n + d, d := d + 3) for i in range(row)]

→ Ссылка