Как вывести спираль из звездочек с разделителем на Python?

Вот такая спираль с разделением, состоящая из * должна быть размером n*n (n вводится, как стандартный ввод). Я с легкостью могу вывести спираль из чисел, но вот разделение никак не придумаю, как реализовать..
* * * * * * *
*            
*   * * * * *
*   *       *
*   * * *   *
*           *
* * * * * * *
  • Вопрос задан
  • 602 просмотра
Решения вопроса 2
@Karpion
Вот программа на BBС-basic, разбирайтесь:
n=18
DIM a(n,n)
FOR x=1 TO n
	FOR y=1 TO n
		a(x,y)=ASC(" ")
	NEXT
NEXT

FOR y=1 TO n
	a(1,y)=ASC("*")
	a(y,1)=ASC("*")
	a(y,n)=ASC("*")
NEXT

x=n : y=n
u=0 : v=-1

FOR i=1 TO n-3
	WHILE a(x+u+u,y+v+v)<>ASC("*")
		x+=u
		y+=v
		a(x,y)=ASC("*")
	ENDWHILE
	w=v : v=-u : u=w
NEXT

FOR y=1 TO n
	FOR x=1 TO n
		PRINT CHR$(a(x,y));
	NEXT
	PRINT
NEXT
PRINT
Немного совсем не то. Позже доделаю. Но думаю, принцип понятен.
Ответ написан
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
n = 16

c = {True: '*', False: ' '}
r = list(range(n//2))
for sy in (1, -1):
    for y in r[::sy]:
        s = []
        for sx in (1, -1):
            for x in r[::sx]:
                d = -2 if (sx, sy) == (-1, 1) else 0
                s.append(c[x >= y+d and not y % 2 or x < y+d and not x % 2])


        print(''.join(s))

Вот пример для четного N.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Artem_FreeMan
Решение вашего вопроса:

def GetRange(len, i):
center = 0
center+=len//2
ren = 0
if i<=center:
ren = i
else:
ren = len-i
return ren

def ListToString(list):
string=""
return string.join(list)

def PrintStarSquare(len):
i=0
for i in range(len):
s =[]
j=0
for j in range(len):
s.append(' ')
if i%2 == 0:
k=0
for k in range(len):
s[k]='*'
c=0
p = GetRange(len,i)-1
for c in range(p):
if c%2 == 0:
s[c+1]=' '
else:
s[len-c-1]=' '
else:
c=0
for c in range(GetRange(len,i)):
if c%2 == 0:
s[c]='*'
else:
s[len-c]='*'
print(ListToString(s))
//вызвать с указанной длинной - PrintStarSquare
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы