Консультация № 195105
01.04.2019, 15:06
0.00 руб.
0 1 1
Здравствуйте! Прошу помощи в следующем вопросе
Python
как заполните массив размерностью n × m числами от 1 до mn, расположив их по спирали, закрученной по часовой стрелке

Обсуждение

давно
Академик
20764
1861
02.04.2019, 22:15
общий
это ответ
Здравствуйте, smfjl2@yandex.ru!

В задании не сказано спираль раскручивается или закручивается. так что реализована закручивающаяся. Раскручивающаяся на самом деле реализуется так же, только значения подставляются другие

[code lang=python]#!/usr/bin/python3

import sys

# ввожу размеры
width, height = map (int, input("Введите размеры через пробел: ширина высота: ").split())

# создаю массив
array = [[None] * width for y in range(height)]

xf = 0; xl = width; yf = 0; yl = height
val = 1

while True:
# двигаюсь слева направо
if xl <= xf: break
for x in range (xf, xl):
array[yf][x] = val
val += 1
yf += 1
# сверху вниз
if yl <= yf: break
for y in range (yf, yl):
array[y][xl - 1] = val
val += 1
xl -= 1
# справа налево
if xl <= xf: break
for x in range (xl, xf, -1):
array[yl - 1][x - 1] = val
val += 1
yl -= 1
# снизу вверх
if yl <= yf: break
for y in range (yl, yf, -1):
array[y - 1][xf] = val
val += 1
xf += 1

# вывод
for y in range (height):
for x in range (width):
sys.stdout.write("{0:4}".format(array[y][x]))
sys.stdout.write("\n")
[/code]

Написано на Python 3 под Linux

Результат:

Код:
$ ./195105.py 
Введите размеры через пробел: ширина высота: 5 3
1 2 3 4 5
12 13 14 15 6
11 10 9 8 7
$ ./195105.py
Введите размеры через пробел: ширина высота: 3 5
1 2 3
12 13 4
11 14 5
10 15 6
9 8 7
$ ./195105.py
Введите размеры через пробел: ширина высота: 1 1
1
$ ./195105.py
Введите размеры через пробел: ширина высота: 1 2
1
2
$ ./195105.py
Введите размеры через пробел: ширина высота: 2 1
1 2
$ ./195105.py
Введите размеры через пробел: ширина высота: 0 0
$ ./195105.py
Введите размеры через пробел: ширина высота: no
Traceback (most recent call last):
File "./195105.py", line 6, in <module>
width, height = map (int, input("Введите размеры через пробел: ширина высота: ").split())
ValueError: invalid literal for int() with base 10: 'no'
Форма ответа