【问题标题】:Printing a Checkboard without using Numpy不使用 Numpy 打印 Checkboard
【发布时间】:2021-03-25 16:49:50
【问题描述】:

我正在尝试使用数组打印棋盘,但不导入任何像 Numpy 这样的包。代码应该打印回来

X 0 X 0 X 0 X 0
0 X 0 X 0 X 0 X
X 0 X 0 X 0 X 0
0 X 0 X 0 X 0 X
X 0 X 0 X 0 X 0
0 X 0 X 0 X 0 X
X 0 X 0 X 0 X 0
0 X 0 X 0 X 0 X

这是我写的

Checkerboard = [[0]*8 for i in range(8)]
for i in Checkerboard:
  p = 0
  q = 0
  for j in i:
    if q % 2 == 0 and p % 2 == 0:
      Checkerboard[i][j] = "X"
    elif q % 2 == 1 and p % 2 == 1:
      Checkerboard[i][j] = "X"
    p += 1
for i in Checkerboard:
  for j in Checkerboard:
    print(j, end='')
  print('')

但它不断收到错误:

Checkerboard[i][j] = "X"
TypeError: list indices must be integers or slices, not list

谁能帮我解决问题或提供一些提示?
(这是一个硬件作业)

【问题讨论】:

  • for i in checkerboard... i 是一个子列表,而不是可用于索引的整数。您可以迭代索引而不是对象,例如 for i in range(len(checkerboard))...
  • for i in Checkerboard 迭代二维数组。您正在遍历列表列表。所以如果i是一个列表,你怎么能做到Checkerboard[i][j]呢? i 不是整数。也许你可以做类似for i, sublist in enumerate (Checkerboard) 这样的事情,让你可以访问子列表它的索引。
  • 我们希望您执行基本诊断以包含在您的帖子中。至少,在错误点打印可疑值并将其追溯到其来源。在很多情况下,做这个基本的诊断会告诉你问题出在哪里,你根本不需要 Stack Overflow。
  • 您在哪里打印了导致问题的索引值?您对这些值或如何使用它们有什么不了解的地方?正如发布指南告诉您的那样,“让其他人轻松帮助您。”使用无意义的变量名并将它们打包到不符合标准的间距中不会让其他人想要阅读您的代码。
  • 请提供预期的minimal, reproducible example (MRE)。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。由于语法错误,您发布的代码无法运行。

标签: python arrays python-3.x multidimensional-array


【解决方案1】:

试试这个代码:

Checkerboard = [["0"] * 8 for i in range(8)]
for i in range(len(Checkerboard)):
    for j in range(len(Checkerboard[i])):
        if i % 2 == 0 and j % 2 == 0:
            Checkerboard[i][j] = "X"
        elif i % 2 == 1 and j % 2 == 1:
            Checkerboard[i][j] = "X"


for place in Checkerboard:
    print(place, end='')
    print('')

我更新了您的代码并进行了一些更改。 您尝试以这种方式更改板中的位置的问题:

Checkerboard[i][j] = "X" 

但是 i 和 j 没有声明为索引。

【讨论】:

  • 非常感谢!我刚刚意识到我已经把打印数组和索引数组弄混了。
【解决方案2】:

如果您使用理解,您的解决方案将如下所示:

Checkerboard = [[0 if (i % 2 == 0 and j % 2 == 1) or (i % 2 == 1 and j % 2 == 0) else 'X' for j in range(8)] for i in range(8)]

Checkerboard

[['X', 0, 'X', 0, 'X', 0, 'X', 0],
 [0, 'X', 0, 'X', 0, 'X', 0, 'X'],
 ['X', 0, 'X', 0, 'X', 0, 'X', 0],
 [0, 'X', 0, 'X', 0, 'X', 0, 'X'],
 ['X', 0, 'X', 0, 'X', 0, 'X', 0],
 [0, 'X', 0, 'X', 0, 'X', 0, 'X'],
 ['X', 0, 'X', 0, 'X', 0, 'X', 0],
 [0, 'X', 0, 'X', 0, 'X', 0, 'X']]

或者使用更精细的字体:

for i in Checkerboard:
    for j in i:
        print(j, end=' ')
    print()

X 0 X 0 X 0 X 0 
0 X 0 X 0 X 0 X 
X 0 X 0 X 0 X 0 
0 X 0 X 0 X 0 X 
X 0 X 0 X 0 X 0 
0 X 0 X 0 X 0 X 
X 0 X 0 X 0 X 0 
0 X 0 X 0 X 0 X 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2019-02-23
    • 1970-01-01
    • 2021-05-03
    • 2016-07-04
    • 1970-01-01
    相关资源
    最近更新 更多