首页 > 解决方案 > 如何将字符串从循环附加到单个输出行?

问题描述

因此,我正在尝试制作一个基于文本的 connect-4 游戏,以便更好地理解 Python 及其实际工作原理。

精简版

长版

我正在尝试使用循环系统在每次转弯后以均匀间隔且美观的格式打印出数组,以便用户在下一次转弯之前清楚地反馈当前电路板的外观。为此,我希望能够拥有尽可能小的代码行,以便更容易阅读代码本身。尽管这可能不是执行此场景的最佳实践,但我想更好地理解这种编码方式,以便在需要时将其应用于未来的项目。

就实际执行而言,我正在尝试使用 while 循环将数组的 7 个位置一个接一个地附加到同一输出行中,用于同一行中的数组位置。在此之后,我想在前一行下方的行上打印下一行,如“所需输出”下面的代码所示。

预先感谢您的回答、建议和意见。

工作正在进行中

import numpy as np
ARRAY = np.zeros(shape=(6, 7), dtype = 'int8')
# In reality I will be using an empty array that gradually gets populated
# Zeros are used for ease of asking the question

def Display_board():
    i = 0
    while i < 7:
        j = 0
        print("  ", end = " ")
        while j < 8:
            print(str(ARRAY[i][j]))
            j += 1
        i += 1

进行中的输出

 0
   0
0
0
0
0
0
0
   0
0
0
0
0
0
0
# It goes on but didn't include as it would take up unnessary space in the question

如果我将打印数组的行更改为如下,我会得到另一个不需要的输出

print(str(ARRAY[i][j]), end = " ")

#output
  0 0 0 0 0 0 0    0 0 0 0 0 0 0    0 0 0 0 0 0 0    0 0 0 0 0 0 0    0 0 0 0 0 0 0    0 0 0 0 0 0 0

当前工作方法 - 提供所需的输出

def Display_board():
   for i in range(6):
       print("   " + str(ARRAY[i][0]) + "  " + str(ARRAY[i][1]) + "  " + str(ARRAY[i][2]) \
       + "  " + str(ARRAY[i][3]) + "  " + str(ARRAY[i][4]) + "  " + str(ARRAY[i][5])\
       + "  " + str(ARRAY[i][6]))

期望的输出

  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0

标签: python-3.xnumpyloops

解决方案


想出了两个功能

第一:

def display_board1(board):

    m, n = board.shape

    for i in range(m):
        for j in range(n):
            print(board[i][j], end= ' ')
        print()

    return 1

第二个:

def display_board2(board):

    s = board.__str__()
    s = s.replace('[', ']')
    s = s.replace(']', '')
    s = ' ' + s

    print(s)

    return 1

这些return 1语句仅用于绘图,如果您不想要它们,请删除它们

这是它们在输入大小方面的性能 display_board2()更快,更稳定

import perfplot

bench = perfplot.bench(
    setup= np.zeros,
    kernels= [
        display_board1,
        display_board2
    ],
    n_range= [(i, i) for i in range(10)],
)

bench.show()

在此处输入图像描述


推荐阅读