У меня есть игра Connect Four с доской, которую я сделал с множеством функций печати, что невероятно неэффективно. Вот он: print ("0 1 2 3 4 5 6") print ("...

-3
Vix 23 Янв 2021 в 21:37

2 ответа

Лучший ответ

Это должно сделать трик. :)

print("   0   1   2   3   4   5   6")
for row in range(7):
    print("   " + board[row][0] + " | " + board[row][1] + " | " + board[row][2] + " | " + board[row][3] + " | " + board[row][4] + " | " + board[row][5] + " | " + board[row][6])
    if row != 6:
        print("  ---+---+---+---+---+---+---")
print()
0
Nicklas 23 Янв 2021 в 19:10

Когда вы пытаетесь свернуть свой код в циклы, ищите, где вы повторяете себя. Например, похоже, что каждая линия печати одинакова с другой координатой x. Это ваш внешний цикл. Внутри каждой строки каждая ячейка одинакова с другой координатой y. Это ваш внутренний цикл. Циклы тоже могут быть в форме понимания. Кроме того, ваш друг - метод string.join (), потому что разделитель между ячейками и между строками всегда будет одинаковым. Программисты Python любят однострочные решения. Я уверен, что есть еще более жесткий способ написать это, но вы должны быть осторожны, чтобы не затягивать вещи слишком сильно, потому что это затруднит изменение вашего кода в будущем. Вот один из способов, которым вы можете это исправить:

def generate_line(x, board):
    return "   " + " | ".join(board[x][y] for y in range(7)) + "\n"
board = [['x','o','x','o','x','o','x'] for x in range(7)]
border = "  ---+---+---+---+---+---+---\n"
lines = [generate_line(x, board) for x in range(7)]
print(border.join(lines))
2
luthervespers 23 Янв 2021 в 19:10
65863021