Advertisement
Lonely_Wanderer

Спираль из чисел

Apr 27th, 2023 (edited)
1,096
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.51 KB | None | 0 0
  1. def m():
  2.     # переменная для хранения введённого числа
  3.     # определяющая размерность "спирали"
  4.     n = int(input("Enter  your number: "))
  5.  
  6.     # двумерный список, который будем заполнять числами
  7.     l = [[0]*n for i in range(n)]
  8.  
  9.     # номер витка спирали, вдоль которого движемся
  10.     step=1
  11.  
  12.     # направление движения. 1- право, 2-низ, 3-лево, 4-верх
  13.     dir = 1
  14.  
  15.     # значение последнего добавленного числа
  16.     last = 1
  17.  
  18.     # индексы, i - вертикаль, j - горизонталь
  19.     i,j = 0,0
  20.    
  21.     # добавление первой цифры
  22.     l[i][j] = last
  23.     last+=1
  24.  
  25.     while last <= n*n:
  26.         # движение вправо, поэтому увеличиваем индекс j,
  27.         # который отвечает за столбцы, если достигли правой границы -
  28.         # переключаем направление на "вниз"
  29.         if dir == 1:
  30.             if j == n-step:
  31.                 dir+=1
  32.                 i+=1
  33.             else:
  34.                 j += 1
  35.         # движение вниз, поэтому увеличиваем индекс i,
  36.         # который отвечает за строки, если достигли нижней границы -
  37.         # переключаем направление на "влево"
  38.         elif dir == 2:
  39.             if i == n-step:
  40.                 dir+=1
  41.                 j-=1
  42.             else:
  43.                 i += 1
  44.         # движение влево, поэтому уменьшаем индекс j,
  45.         # который отвечает за столбцы, если достигли левой границы -
  46.         # переключаем направление на "вверх"
  47.         elif dir == 3:
  48.             if j < step:
  49.                 dir+=1
  50.                 i-=1
  51.             else:
  52.                 j -= 1
  53.         # движение вверх, поэтому уменьшаем индекс i,
  54.         # который отвечает за строки, если достигли нижней границы -
  55.         # переключаем направление на "вправо" и увеличиваем переменную
  56.         # которая ведёт подсчёт "витков" спирали
  57.         elif dir == 4:
  58.             if i == step:
  59.                 dir=1
  60.                 step+=1
  61.                 j+=1
  62.             else:
  63.                 i-=1
  64.         # запись числа в список
  65.         l[i][j] = last
  66.         last+=1
  67.     # Вывод результата на экран
  68.     for i in range(n):
  69.         for j in range(n):
  70.             print(l[i][j], end="\t")
  71.         print()
  72.        
  73. m()
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement