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

Python数字滑块拼图网格无法对齐问题求助

数字滑块拼图网格对齐问题解决

问题描述

我正在用Python循环制作数字滑块拼图,该函数接收逗号分隔的字符串序列,但网格无法对齐,不清楚原因。以下是我的代码:

import math
def get_size(data):
    count=len(data)
    sqroot=math.sqrt(count)
    n=math.ceil(sqroot)
    return n

def draw_row(data_list):
    list_to_join=[]
    for data in data_list:
        if len(data)==0:
            list_to_join.append('    ')
        elif len(data)==1:
            list_to_join.append(f'  {data} ')
        elif len(data)==2:
            list_to_join.append(f' {data} ')
    out= '│'.join(list_to_join)
    return f'│{out}│'

def draw_grid(n):
        top='┌'+'───┬'*(n-1)+'───┐'
        number=n
        print(top)
        while number>0:
                if number!=1:
                        print('│'+' x │'*n)
                        print("├" + "───┼" * (n - 1) + "───┤")
                elif number==1:
                        print('│'+' x │'*n)
                        
                number=number-1
                
        bottom='└'+'───┴'*(n-1)+'───┘'
        print(bottom)#├

def milestone_1(tiles):
    grid_tiles=tiles.split(',')
    grid_size=get_size(grid_tiles)
    print('┌───'+'┬───'*(grid_size-1)+'┐')

    for number in range(grid_size):
        row = grid_tiles[number*grid_size:(number+1)*grid_size]
        row_string= ''
        
        for tile in row:
            if tile=='':
                tile+='  '
                row_string+='│{}'.format(tile)
            elif len(tile)==1:
                tile+=' '
                row_string+='│ {}'.format(tile)
            else:
                tile+=' '
                row_string+='│{}'.format(tile)
        print(row_string + '│')

        if number< grid_size-1:
            print('├───' + '┼───'*(grid_size-1) + '┤')
    
    print('└───'+'┴───'*(grid_size-1)+'┘')
milestone_1("1,2,3,4,5,6,7,8,9,10,,12,13,14,11,15")

问题原因

网格对齐失效的核心是每个格子的字符宽度不统一:

  • 空值处理后仅为2字符,与分隔线的3字符宽度不匹配;
  • 一位数、两位数的手动空格拼接逻辑混乱,导致不同长度的数字生成的格子宽度不一致,最终破坏整体对齐。

修正方案

统一每个格子的宽度为3字符(与分隔线───对应),用Python字符串格式化的居中对齐语法{:^3}自动补全空格,确保每个格子宽度一致。

修正后的milestone_1函数如下:

def milestone_1(tiles):
    grid_tiles = tiles.split(',')
    grid_size = get_size(grid_tiles)
    # 打印顶部边框
    print('┌' + '───┬' * (grid_size - 1) + '───┐')

    for number in range(grid_size):
        row = grid_tiles[number * grid_size : (number + 1) * grid_size]
        row_parts = []
        for tile in row:
            # 统一居中对齐,宽度固定为3,空值自动填充为三个空格
            row_parts.append(f'{tile:^3}')
        # 用│连接每个格子,前后补充边框│
        print(f'│{"│".join(row_parts)}│')

        # 打印中间分隔线(最后一行不打印)
        if number < grid_size - 1:
            print('├' + '───┼' * (grid_size - 1) + '───┤')
    
    # 打印底部边框
    print('└' + '───┴' * (grid_size - 1) + '───┘')

运行结果

修正后运行目标函数,输出的网格会完全对齐:

┌───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │
├───┼───┼───┼───┤
│ 5 │ 6 │ 7 │ 8 │
├───┼───┼───┼───┤
│ 9 │10 │   │12 │
├───┼───┼───┼───┤
│13 │14 │11 │15 │
└───┴───┴───┴───┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:42:54