Печать шаблонов с использованием l oop дюймов python - PullRequest
0 голосов
/ 17 июня 2020

Моя программа считывает целое число N, которое соответствует порядку двумерного массива целых чисел, и создает массив в соответствии с приведенным ниже примером. Я хочу заполнить средние элементы, как ожидаемый результат.

Мой код:

n = int(input())
for row in range(1, n+1):
    for colum in range(1, n+1):
        print(row, end="   ")
    print()


Входные данные:

5 


Мои выходные данные:

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


Результат, который я хочу:

1   1   1   1   1
1   2   2   2   1
1   2   3   2   1
1   2   2   2   1
1   1   1   1   1

Я хочу заполнить средние элементы вот так. Число высоты посередине, затем второе число высоты и так далее ..

Ответы [ 2 ]

1 голос
/ 17 июня 2020

для последовательности «1-2-3-2-1», вы можете получить его как «минимум между строкой и n + 1-строкой» - - min(row, n + 1 - row). (И симметричный для столбца) - а затем вы печатаете минимум этого вычисления для строки и столбцов:

n = int(input())
for row in range(1, n+1):
    for column in range(1, n+1):
        mrow = min(row, n + 1 - row)
        mcol = min(column, n + 1 - column) 
        print(min(mrow, mcol), end="   ")
    print()
0 голосов
/ 18 июня 2020

Надеюсь, это не вопрос домашнего задания, но я помогу вам.
Это можно сделать намного проще с помощью списков!:

def cell_value(i, j, n_rows):
    return min(
        abs(i - -1),
        abs(i - n_rows),
        abs(j - -1),
        abs(j - n_rows),
    )

rows=int(input("Enter the number of rows:"))
row2 = [
    [
        cell_value(i, j, rows)
        for j in range(rows)
    ]
    for i in range(rows)
]

for r in row2:
    print(*r)

Или это можно сделать еще проще как это показано ниже:

numberOfRows = int(input("Enter the number of rows:"))
listOut = [[1]*numberOfRows] * numberOfRows #grid of 1s of appropriate size
for j in range(int((numberOfRows+1)/2)): #symmetrical, so only look to the middle
    if j > 0:
        listOut[j] = list(listOut[j-1]) #copy previous row
    for i in range(int((numberOfRows+1)/2)):   
        if i>=j:
            listOut[j][i] = j+1
            listOut[j][numberOfRows-(i+1)] = j+1
    #copy current row to appropriate distance from the end
    listOut[numberOfRows-(j+1)] = list(listOut[j])
for row in listOut:
    print(row)

Обе указанные выше программы дают ТО ЖЕ результат

Enter the number of rows:5
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

Примечание: это возможно только для нечетных чисел! Дайте мне знать, если у вас есть сомнения ...
Ура!

...