修复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| ---------------------------------------------------------------------------------------
解决方案
问题根源
pares()函数拆分字符串时引入空元素:原文本的换行导致split后出现空字符串,重复后空元素也会填充到表格中,造成单元格缺失。- 未生成标准6x6二维矩阵:没有将36个元素按每行6个分割,导致各行元素数量不一致。
- 排版宽度不足:
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
相关产品推荐
相关产品推荐

