无法让网格对齐

Cant get the grids to line up

提问人:cherishroby 提问时间:4/24/2023 最后编辑:cherishroby 更新时间:4/24/2023 访问量:35

问:

我正在使用循环在 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")

我一整天都在做这件事,还是没有运气有人帮忙,拜托。我得到的输出

python-3.x 函数 for-loop while-loop

评论


答:

0赞 Jason Chia 4/24/2023 #1

你错过了一小部分。对于所有组件,您将添加“间距”以分隔您正在绘制的网格。对于长度为 1 的整数,它的 2 个空格。对于长度为 2 的整数,其为 3 空格。但是,对于空白位置,将其定义为空格 ''。因此,您需要实际添加 4 个空格,而不是您定义的 3 个空格。

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+='   ' #Add an additional space
                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")

评论

0赞 Jason Chia 4/24/2023
那会有点困难。从本质上讲,您的网格是用 5 个单位的块绘制的。即:“abcde”将填满您的块。给定大小为 1 的单位,有一个清晰的中心,但对于大小 2 来说它失败了。例如,也许将其扩展到 6 的长度并用“01”、“02”替换您的个位数将是一个快速的解决方案。但这真的有必要吗?