📜  如何制作密码方形多色方形螺旋python(1)

📅  最后修改于: 2023-12-03 15:38:11.146000             🧑  作者: Mango

如何制作密码方形多色方形螺旋 Python

在这个项目中,我们将学习如何使用 Python 制作一个密码方形多色方形螺旋。这个项目将涉及到 Python 的基本数据类型、循环、条件语句和二维列表。

程序的实现

我们将使用 Python 中的二维列表来存储密码方形,并使用循环和条件语句将元素添加到列表中。最终,我们将使用 matplotlib 库来绘制多色方形螺旋。

Python 代码:

import matplotlib.pyplot as plt

def create_password_square_matrix(n, password):
    # 初始化 n x n 的二维列表
    matrix = [[' ']*n for i in range(n)]

    # 从左上角开始添加密码方形的第一个字符
    matrix[0][0] = password[0]

    # 在第一列上添加密码方形的字符
    for i in range(1, n):
        matrix[i][0] = password[i%len(password)]
    
    # 在最后一行上添加密码方形的字符
    for i in range(1, n):
        matrix[n-1][i] = password[(n-1)+i%len(password)]
    
    # 在最后一列上添加密码方形的字符
    for i in range(n-2, -1, -1):
        matrix[i][n-1] = password[(2*n-2-i)%len(password)]
    
    # 在第一行上添加密码方形的字符
    for i in range(n-2, 0, -1):
        matrix[0][i] = password[(2*n-1-i)%len(password)]
        
    # 在第二圈中添加密码方形的字符
    if n > 2:
        sub_matrix = create_password_square_matrix(n-2, password)
        for i in range(1, n-1):
            for j in range(1, n-1):
                matrix[i][j] = sub_matrix[i-1][j-1]


    return matrix

def create_spiral(matrix, num_colors):
    fig, ax = plt.subplots()
    
    n = len(matrix)
    
    # 计算颜色列表
    colors = plt.cm.tab20.colors
    colors = colors[:num_colors]
    
    # 画多色方形螺旋
    for i in range(n//2):
        x = list(range(i, n-i))
        y = [i]*len(x)
        c = matrix[i][i:n-i]
        c = [colors[j%num_colors] for j in range(len(c))]
        ax.scatter(x, y, s=70, color=c)
        
        x = [n-i-1]*len(range(i+1, n-i))
        y = list(range(i+1, n-i))
        c = matrix[i:n-i][n-i-1]
        c = [colors[j%num_colors] for j in range(len(c))]
        ax.scatter(x, y, s=70, color=c)
        
        x = list(range(i+1, n-i))[::-1]
        y = [n-i-1]*len(x)
        c = matrix[n-i-1][i:n-i][::-1]
        c = [colors[j%num_colors] for j in range(len(c))]
        ax.scatter(x, y, s=70, color=c)
        
        x = [i]*len(range(i+1, n-i-1))[::-1]
        y = list(range(i+1, n-i-1))[::-1]
        c = matrix[i:n-i-1][i][::-1]
        c = [colors[j%num_colors] for j in range(len(c))]
        ax.scatter(x, y, s=70, color=c)
    
    
    ax.axis('off')
    plt.show()


matrix = create_password_square_matrix(7, 'PASSWORD')
create_spiral(matrix, 3)
程序的解释
create_password_square_matrix 函数

这个函数的作用是创建密码方形二维列表。参数 n 表示密码方形的大小,password 表示密码。

首先,我们使用列表推导式创建 n x n 的二维列表,用空格填充。

matrix = [[' ']*n for i in range(n)]

然后,我们从左上角开始添加密码方形的第一个字符。

matrix[0][0] = password[0]

接着,我们在第一列、最后一行、最后一列和第一行上添加密码方形的字符。

for i in range(1, n):
    matrix[i][0] = password[i%len(password)]

for i in range(1, n):
    matrix[n-1][i] = password[(n-1)+i%len(password)]

for i in range(n-2, -1, -1):
    matrix[i][n-1] = password[(2*n-2-i)%len(password)]

for i in range(n-2, 0, -1):
    matrix[0][i] = password[(2*n-1-i)%len(password)]

最后,我们在第二圈中添加密码方形的字符。我们使用递归来实现这个功能。

if n > 2:
    sub_matrix = create_password_square_matrix(n-2, password)
    for i in range(1, n-1):
        for j in range(1, n-1):
            matrix[i][j] = sub_matrix[i-1][j-1]
create_spiral 函数

这个函数的作用是创建多色方形螺旋图像。参数 matrix 表示密码方形二维列表,num_colors 表示要使用的颜色数量。

我们使用 matplotlib 库来绘制图像。我们使用 subplots 方法来创建图像。

fig, ax = plt.subplots()

然后,我们计算颜色列表。

colors = plt.cm.tab20.colors
colors = colors[:num_colors]

接着,我们使用循环通过密码方形的每个元素来画多色方形螺旋。

for i in range(n//2):
    x = list(range(i, n-i))
    y = [i]*len(x)
    c = matrix[i][i:n-i]
    c = [colors[j%num_colors] for j in range(len(c))]
    ax.scatter(x, y, s=70, color=c)
    
    x = [n-i-1]*len(range(i+1, n-i))
    y = list(range(i+1, n-i))
    c = matrix[i:n-i][n-i-1]
    c = [colors[j%num_colors] for j in range(len(c))]
    ax.scatter(x, y, s=70, color=c)
    
    x = list(range(i+1, n-i))[::-1]
    y = [n-i-1]*len(x)
    c = matrix[n-i-1][i:n-i][::-1]
    c = [colors[j%num_colors] for j in range(len(c))]
    ax.scatter(x, y, s=70, color=c)
    
    x = [i]*len(range(i+1, n-i-1))[::-1]
    y = list(range(i+1, n-i-1))[::-1]
    c = matrix[i:n-i-1][i][::-1]
    c = [colors[j%num_colors] for j in range(len(c))]
    ax.scatter(x, y, s=70, color=c)

最后,我们关闭坐标轴,并显示图像。

ax.axis('off')
plt.show()
程序的运行

运行上述代码,我们将创建一个密码方形多色方形螺旋。图像中的每个方块都是密码方形中的一个字符。我们可以在程序中修改密码方形的大小和密码,以及要使用的颜色数量。

参考资料: