如何在python中做字母螺旋?

How to do Alphabetic Spiral in python?

提问人:Udin 提问时间:8/22/2022 最后编辑:Udin 更新时间:8/23/2022 访问量:100

问:

-- 问题 --

输入 : 3

输出:

A B C

H I D

G F E

输入 : 5 输出:

A、B、C、D、E

P Q R S F

O X Y T G

N W V U H

M L K J I

-- 我的进度: --

print("input :")
n = int(input())

alphabet= 65
for i in range(n):
    print((n+i)*" ")
    for j in range(i, i+n):
        print(chr(alphabet), end=" ")
        alphabet = alphabet + 1
print()

输入 : 5

输出:

A、B、C、D、E

F G H I J

K L M N O

P Q R S T

U V W X Y

输入 : 3

输出:

A B C

D、E、F

G H I

蟒蛇 螺旋

评论

0赞 leleogere 8/22/2022
添加更多细节(比如 Z 不存在正常吗?input=4 或 input=6 的结果是什么?),并指定您尝试过的内容以及卡住的位置
1赞 matszwecja 8/22/2022
我如何提出一个好问题?
0赞 barryodev 8/22/2022
家庭作业问题?
0赞 jros 8/22/2022
这种螺旋式的逻辑是什么?看起来不像您按顺序一次打印输入的字母数
0赞 Udin 8/22/2022
我刚刚编辑了问题,很抱歉不清楚

答:

0赞 gimix 8/23/2022 #1

这并不像看起来那么微不足道。无论如何,这里有一个非常简单的解决方案:

  • 构建一个足够长的字母表(我根据需要重复了 ASCII 大写字母,这样我们就可以构建任何大小的螺旋)
  • 在内存中创建一个矩阵,每个字母都位于正确的位置
  • 打印矩阵

代码:

from string import ascii_uppercase

def spiral(n):
    alphabet = ascii_uppercase * (n**2//26+1) #repeat ABC..XYZ until needed
    alphabet = alphabet[:n**2] #take only n**2 chars
    ln = len(alphabet)
    grid = []
    for _ in range(n):
        grid.append([' ']*n)
    min_row = 0
    min_col = 0
    max_row = n
    max_col = n
    i = 0
    while i < ln:
        #left to right
        row = min_row
        for col in range(min_col, max_col):
            if i == ln:
                break
            grid[row][col] = alphabet[i]
            i += 1
        min_row += 1
        #top to bottom
        col = max_col-1
        for row in range(min_row, max_row):
            if i == ln:
                break
            grid[row][col] = alphabet[i]
            i += 1
        max_col -= 1
        #right to left
        row = max_row-1
        for col in range(max_col-1, min_col-1, -1):
            if i == ln:
                break
            grid[row][col] = alphabet[i]
            i += 1
        max_row -= 1
        #bottom to top
        col = min_col
        for row in range(max_row-1, min_row-1, -1):
            if i == ln:
                break
            grid[row][col] = alphabet[i]
            i += 1
        min_col += 1
    #print grid
    for row in range(n):
        for col in range(n):
            print(grid[row][col], end=' ')
        print()
        
>>> spiral(3)
A B C 
H I D 
G F E 

>>> spiral(9)
A B C D E F G H I 
F G H I J K L M J 
E D E F G H I N K 
D C T U V W J O L 
C B S B C X K P M 
B A R A Z Y L Q N 
A Z Q P O N M R O 
Z Y X W V U T S P 
Y X W V U T S R Q