我必须在python中生成这样的板子。
这是理想的结果:
0 1 2 3 4 5 6 7 8 9 0 1 2
0 * * *
1 * D *
2 * D *
3 * D *
4 * D *
5 * * * * * * D * * * * * *
6 * D D D D D D D D D D D *
7 * * * * * * D * * * * * *
8 * D *
9 * D *
0 * D *
1 * D *
2 * * *
到目前为止,我已完成此操作:
0 1 2 3 4 5 6 7 8
0 * * * * * * * * *
1 * * * * * * * * *
2 * * * * * * * * *
3 * * * * * * * * *
4 * * * * * * * * *
5 * * * * * * * * *
6 * * * * * * * * *
7 * * * * * * * * *
8 * * * * * * * * *
到目前为止,这是我的代码:
def makeboard(x):
board = []
for r in range(x+1):
brow = []
for c in range(x+1):
if r == c == 0:
brow.append(' ')
elif r == 0:
brow.append(str(c-1))
elif c == 0:
brow.append(str(r-1))
else:
brow.append('*')
board.append(brow)
return board
b =makeboard(9)
for x in b:
print(‘ ‘.join(x))
我的第一个问题是,如果我要制作一个12x12的电路板,那么第一行和9边的数字会使我的电路板不对称。因此,我想让它们重置为9以上,以便它们从0重新开始。我需要帮助。 我的第二个问题是我无法像需要生成的那样制作板。希望有一些提示。
答案 0 :(得分:0)
要使数字经过0
之后再返回9
,可以对整数(%
)使用取模运算符:
>>> for x in range(15):
... print(x, x % 10)
...
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 0
11 1
12 2
13 3
14 4
您还可以使用math.floor
和math.ceil
函数来帮助查找中点,上方的行/列以及中心线下方的行/列。
答案 1 :(得分:0)
奇怪的是,我在尝试编译您的代码时遇到很多错误:缩进错误,并且某种程度上您的代码能够使用`..`
个字符而不是通常的".."
和'..'
运行。我调整了代码,使其在我的系统上运行;您可能需要将其改回。
那是说:你走在正确的轨道上,但放弃得太早了。在double循环中需要做的只是检查要在什么位置插入什么字符:
def makeboard(x):
board = []
for r in range(x+1):
brow = []
for c in range(x+1):
if r == c == 0:
brow.append(' ') # top left corner
elif r == 0:
brow.append(str(c-1)[-1]) # top number row, last digit only
elif c == 0:
brow.append(str(r-1)[-1]) # left number column, last digit only
elif (x>>1) <= r <= (x>>1)+2 or (x>>1) <= c <= (x>>1)+2: # center 3 rows and columns (offset by +1 because the first number column throws the count off)
if r == 1 or c == 1 or r == x or c == x: # the first and last character in each column and row is always '*'
brow.append('*')
else:
if r == (x>>1)+1 or c == (x>>1)+1: # the center column and row
brow.append('D')
else:
brow.append('*') # everything except the center
else:
brow.append(' ')
board.append(brow)
return board
b =makeboard(13)
for x in b:
print(' '.join(x))
该代码两次添加一个'*'
,因为这样做恰好更容易。可以将这两个单独的测试合并成一条长行,但这会使过程更难以阅读,因此我将其留在了这里。