我正在用python制作井字游戏,并且所有实际的游戏功能均正常运行,但是无法正确打印游戏板。
game = [[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
for row in game:
print(' |'*(len(game)-1)+' ')
for space in row:
print(' '+space+' |',end='')
print('\n'+' |'*(len(game)-1)+' ')
if game.index(row) < len(game)-1:
print('----'+('----'*(len(game)-2))+'---')
由于某种原因,除非每一行都没有移动,否则行索引不会增加。当游戏开始为空时,输出为:
| |
| | |
| |
-----------
| |
| | |
| |
-----------
| |
| | |
| |
-----------
底部不应该有一条线,但是每行都有移动时,它会消失。我还试图摆脱右侧每个空格中间的“ |”。任何提示或建议,将不胜感激!
答案 0 :(得分:2)
我认为您应该按照我之前的建议进行字符串格式化。
尽管我的解决方案与您的代码有很大不同,但这是一个函数,该函数可打印(创建字符串,然后打印该字符串)通用板,其中图块用|
隔开,每行用{{1隔开}}。 -
中的每个元素都将放置在myboard
空格的中间。
tile_width
这输出。
def print_board(myboard, tile_width=3):
msg = ""
for i, row in enumerate(myboard):
# Print row
element = row[0] # first element does not need leading |
element_str = '{:^{width}}'.format(element, width=tile_width)
msg = msg + element_str
for element in row[1:]:
element_str = '|{:^{width}}'.format(element, width=tile_width) # elements with leading |
msg = msg + element_str
msg = msg + '\n'
# Print row divider if its not the last row
if i is not len(myboard) - 1:
element_str = '{:-^{width}}'.format("", width=((tile_width + 1) * len(row) - 1)) # '*' as fill char
msg = msg + element_str
msg = msg + '\n'
print(msg)
cur = [['x', ' ', 'x'], [' ', 'o', ' '], ['o', '', ' ']]
print_board(cur)
答案 1 :(得分:1)
问题似乎是您使用的是index方法,而不是枚举之类的方法。 index返回给定元素在列表中的位置,而枚举可用于执行您想要做的更多事情(请参见Accessing the index in 'for' loops?)。使用index(row)时,您要求的是给定行所在的最低索引值。在空白板上,该值始终返回为0。
另一种解决方法是为行设置一个计数器(如下例所示)。
对于字符行上的多余行,您可以通过不同地打印行内容来解决此问题,如下例所示。
cur = [[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
# initialize a row counter
rownumb = 0
for row in cur:
print(cur.index(row))
# increment the row counter
rownumb += 1
print(' |'*(len(cur)-1)+' ')
# a different approach to printing the contents of each row
print(' ' + row[0] + ' | ' + row[1] + ' | ' + row[2])
print(' |'*(len(cur)-1)+' ')
# check the counter and don't print the line after the final row
if rownumb < 3:
print('----'+('----'*(len(cur)-2))+'---')
答案 2 :(得分:0)
尽管我的解决方案与您的不同。但我有一个建议。为什么不简单地使用字符串格式打印板,而不是使用如下嵌套循环:
values=[' ' for x in range(9)]
print("\n")
print("\t | |")
print("\t {} | {} | {}".format(values[0], values[1], values[2]))
print('\t_____|_____|_____')
print("\t | |")
print("\t {} | {} | {}".format(values[3], values[4], values[5]))
print('\t_____|_____|_____')
print("\t | |")
print("\t {} | {} | {}".format(values[6], values[7], values[8]))
print("\t | |")
print("\n")
输出如下:
| |
_____|_____|_____
| |
| |
_____|_____|_____
| |
| |
| |