需要帮助将网格转换为字符串

Need help converting grid to string

提问人:TRNF 提问时间:10/7/2023 最后编辑:trincotTRNF 更新时间:10/8/2023 访问量:31

问:

我想将列表转换为分配的字符串。我可以转换 1 行,但我的老师希望我们转换 3 行,为生活游戏制作网格。我已经尝试了一堆不同的代码迭代,最接近的是打印第一行。

我添加了我的老师希望每行做什么,所以它应该更易于解释

def gridToString( grid ):
    
    # create an empty string    
    mystr = ' '

    # for each row in the grid, convert that row

    for row in grid:
        mystr += int(input(row))

        # for each cell in the row, convert the cell
        for cell in row:
            mystr += int(input(cell))
            # add symbol to the string for this cell
            #   symbol + for cells that hold a zero
            if cell == 0:
                 cell = '+'
            #   letter O for cells that are non-zero
            elif cell == 1:
                cell = 'O'
        # add a newline to the string at the end of the grid row
        print(mystr, '\n')
    # return the string representation of the grid
    return mystr
    

    
    lifeGrid = [[1,1,1],
            [0,0,0],
            [0,0,1]]


    # convert the grid to a string
    gridStr = gridToString( lifeGrid )

    # print the string!
    print( gridStr )
    print('')
列表 ASCII 连接 conways-game-of-life 字符串转换

评论


答:

1赞 trincot 10/8/2023 #1

您的尝试中存在以下几个问题:

  • 该函数不应调用 ,也不应调用 。该函数的目的是将作为参数给出的矩阵转换为字符串并返回该字符串。此操作不涉及任何用户输入,也不涉及输出到终端。因此,删除所有和调用。input()print()input()output()

  • 空字符串是 ,而不是 。''' '

  • print(mystr, '\n')不会改变.按照上面的评论去做,你应该做mystrmystr += '\n'

  • 两者都不能工作:这些赋值的右侧必须是字符串,因此调用(返回整数)是错误的。mystr += int(input(row))mystr += int(input(cell))int()

  • mystr += int(input(row))没有做任何有用的事情。 将获取此语句下方的循环中行的内容,因此应删除此语句。mystr

  • mystr += int(input(cell))应该是 ,但请参阅下一点mystr += str(cell)

  • 更改的代码是无用的,因为在更改之后,此新值将执行任何操作:cell

            if cell == 0:
                cell = '+'
            elif cell == 1:
                cell = 'O'
    

    此外,如果不是 0,那么它应该是 1,所以没有必要检查它 -- 这是剩下的唯一可能性。所以让它成为一个.cellelif cell == 1else

    所以做:

            if cell == 0:
                mystr += '+'
            else:
                mystr += 'O'
    

    或更短,用作索引:cell

            mystr += '+O'[cell]
    

    这将替换之前对 的赋值。mystr

更正这些要点后,您将得到以下内容:

def gridToString(grid):
    # not a space, but a really emmpty string: 
    mystr = ''
    for row in grid:
        # don't ask for input and don't print
        for cell in row:
            # assign to mystr the character that corresponds to cell
            mystr += '+O'[cell]
        # add a newline to the string (don't print)
        mystr += '\n'
    return mystr

现在它会起作用。你的问题没有解释字符串是否应该在最后有一个。它可能只是在行之间才需要的。\n

请注意,按如下方式执行此操作更像 pythonic:

def gridToString(grid):
    return '\n'.join(
        ''.join('+O'[cell] for cell in row) 
        for row in grid
    )

在这里,我遗漏了决赛\n

评论

0赞 trincot 10/20/2023
有什么反馈吗?这回答了你的问题吗?