You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复6x6记忆翻牌表格元素缺失与排版不均问题

问题描述

我正在构建一个6x6的数字emoji及其英文写法的记忆翻牌(memorama)表格,行列标记为0-5。目前第0行虽有6个元素但排版不均,第1行仅5个元素且排版混乱,第2行仅4个元素,第3、4、5行各有5个元素。目标是均匀填满6x6表格,让1-18每个数字各重复一次(共36个单元格)。

现有行列编号函数

def despliega_tablero(opcion, matriz, r1 = None, c1 = None, r2 = None, c2 = None):
    if opcion == 1:
        print (matriz)
    else:
        print("        0       |        1       |        2       |        3       |        4       |        5       |")
        print("--------------" * len (matriz))
        num_renglon = 0
        for renglon in matriz:
            print(num_renglon, "|", end="")
            num_renglon = num_renglon + 1

            for elemento in renglon:
                print (f' {elemento}'.center (5), end="")
                print("|", end="")
            print('\n'+ "---------------" * len (renglon))

现有表格填充函数

def pares( ):
    lista = []
    #numbers, all the way from 1 to 18
    pares = """\u0031\u20E3 - one\n\u0032\u20E3 - two\n\u0033\u20E3 - three\n\u0034\u20E3 - four\n\u0035\u20E3 - five\n\u0036\u20E3 - six\n
\u0037\u20E3 - seven\n\u0038\u20E3 - eight\n\u0039\u20E3 - nine\n\u0031\u20E3\u0030\u20E3 - ten\n\u0031\u20E3\u0031\u20E3 - eleven
\n\u0031\u20E3\u0032\u20E3 - twelve\n\u0031\u20E3\u0033\u20E3 - thirteen\n\u0031\u20E3\u0034\u20E3 - fourteen\n\u0031\u20E3\u0035\u20E3 - fifteen
\n\u0031\u20E3\u0036\u20E3 - sixteen\n\u0031\u20E3\u0037\u20E3 - seventeen\n\u0031\u20E3\u0038\u20E3 - eighteen
"""
    lista = pares.split("\n")
    lista = lista * 2
    print(lista)
    print(len(lista))
    return lista

当前表格效果

0       |        1       |        2       |        3       |        4       |        5       |
------------------------------------------------------------------------------------
0 | 1⃣ - one| 2⃣ - two| 3⃣ - three| 4⃣ - four| 5⃣ - five| 6⃣ - six|
------------------------------------------------------------------------------------------
1 |     | 7⃣ - seven| 8⃣ - eight| 9⃣ - nine| 1⃣0⃣ - ten| 1⃣1⃣ - eleven|
------------------------------------------------------------------------------------------
2 |     | 1⃣2⃣ - twelve| 1⃣3⃣ - thirteen| 1⃣4⃣ - fourteen| 1⃣5⃣ - fifteen|     |
------------------------------------------------------------------------------------------
3 | 1⃣6⃣ - sixteen| 1⃣7⃣ - seventeen| 1⃣8⃣ - eighteen|     | 1⃣ - one| 2⃣ - two|
------------------------------------------------------------------------------------------
4 | 3⃣ - three| 4⃣ - four| 5⃣ - five| 6⃣ - six|     | 7⃣ - seven|
------------------------------------------------------------------------------------------
5 | 8⃣ - eight| 9⃣ - nine| 1⃣0⃣ - ten| 1⃣1⃣ - eleven|     | 1⃣2⃣ - twelve|
---------------------------------------------------------------------------------------

解决方案

问题根源

  1. pares()函数拆分字符串时引入空元素:原文本的换行导致split后出现空字符串,重复后空元素也会填充到表格中,造成单元格缺失。
  2. 未生成标准6x6二维矩阵:没有将36个元素按每行6个分割,导致各行元素数量不一致。
  3. 排版宽度不足:center(5)的单元格宽度太小,无法容纳长文本,导致排版错位。

修复步骤

1. 修复pares()函数,生成干净的随机配对列表

过滤空元素,确保仅保留18个有效条目,重复后打乱顺序(符合记忆翻牌的随机性):

import random

def pares():
    pares_texto = """\u0031\u20E3 - one
\u0032\u20E3 - two
\u0033\u20E3 - three
\u0034\u20E3 - four
\u0035\u20E3 - five
\u0036\u20E3 - six
\u0037\u20E3 - seven
\u0038\u20E3 - eight
\u0039\u20E3 - nine
\u0031\u20E3\u0030\u20E3 - ten
\u0031\u20E3\u0031\u20E3 - eleven
\u0031\u20E3\u0032\u20E3 - twelve
\u0031\u20E3\u0033\u20E3 - thirteen
\u0031\u20E3\u0034\u20E3 - fourteen
\u0031\u20E3\u0035\u20E3 - fifteen
\u0031\u20E3\u0036\u20E3 - sixteen
\u0031\u20E3\u0037\u20E3 - seventeen
\u0031\u20E3\u0038\u20E3 - eighteen"""
    # 拆分后过滤空行,得到18个有效元素
    lista = [line.strip() for line in pares_texto.split("\n") if line.strip()]
    # 每个元素重复一次,得到36个元素
    lista = lista * 2
    # 打乱顺序
    random.shuffle(lista)
    return lista

2. 生成标准6x6二维矩阵

将36个元素按每行6个分割,构建规则的二维列表:

def crear_tablero():
    elementos = pares()
    # 每6个元素为一行,生成6x6矩阵
    tablero = [elementos[i:i+6] for i in range(0, 36, 6)]
    return tablero

3. 修复排版函数,统一单元格宽度

增大单元格宽度,确保长文本能正常显示,同时统一分隔线长度:

def despliega_tablero(opcion, matriz, r1=None, c1=None, r2=None, c2=None):
    if opcion == 1:
        print(matriz)
    else:
        # 列标题,每个列名占15位宽度
        print("        0        |        1        |        2        |        3        |        4        |        5        |")
        # 统一分隔线长度
        print("-----------------" * 6)
        num_renglon = 0
        for renglon in matriz:
            print(f"{num_renglon} |", end="")
            num_renglon += 1
            for elemento in renglon:
                # 每个元素居中显示,占15位宽度
                print(f" {elemento.center(15)}", end="|")
            print()
            print("-----------------" * 6)

4. 完整调用示例

if __name__ == "__main__":
    tablero = crear_tablero()
    despliega_tablero(2, tablero)

内容的提问来源于stack exchange,提问作者Armando M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:33:08