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
相关产品推荐
相关产品推荐

