Условно выводить значение списка в функции Python - PullRequest
0 голосов
/ 26 октября 2019

Я делаю простую консольную игру, и мне нужна функция, которая отображает доску по-разному в зависимости от состояния доски и аргументов, которые она получает.

Доска - это 2d список, в котором либо естьзначение, которое имеет значение для игры, или EMPTY_SPOT.

Как я могу изменить свою функцию так, чтобы она проверяла во вложенном цикле, находится ли текущая позиция в аргументе visible, и отображает ли она такзначение списка в этой позиции, пожалуйста? Кортежи представляют (row, column).

. Я уже настроил свой цикл на использование range вместо for item in..., так как я ожидаю, что мне понадобятся эти значения i,j.

 def display_cards(board, visible=[(0, 2), (1, 0)]):
        print(visible)
        for i in range(4):
            for j in range(4):
                if board[i][j] == EMPTY_SPOT:
                    print(EMPTY_SPOT)
                else:
                    print(HIDDEN_CARD, end=EMPTY_SPOT)
            print()

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Вы можете использовать ключевое слово in, чтобы проверить, видимы ли координаты.

def display_cards(board, visible={(0, 2), (1, 0)}): 
    print(visible) 
    for i in range(4): 
        for j in range(4): 
            if (i, j) in visible: 
                print(board[i][j])
            elif board[i][j] == EMPTY_SPOT: 
                print(EMPTY_SPOT) 
            else: 
                print(HIDDEN_CARD, end=EMPTY_SPOT) 
          print()

Примечание

  • Использовать набор вместо списка для видимых,поиск будет быстрее
  • Вы можете сгенерировать генератор, а затем распечатать его, он будет быстрее и чище.
def display_cards_evaluation(board, visible={(0, 2), (1, 0)}): 
    print(visible) 
    for i in range(4): 
        for j in range(4): 
            if (i, j) in visible: 
                yield board[i][j]
            elif board[i][j] == EMPTY_SPOT: 
                yield EMPTY_SPOT
            else: 
                yield HIDDEN_CARD, end=EMPTY_SPOT

def display_cards(evaluation):
    for element in evaluation:
        print(element)

display_cards(display_cards_evaluation(board))
1 голос
/ 26 октября 2019
def display_cards(board, visible):
    print(visible) # Assume visible is {(0, 2), (1, 0)}
    for i in range(4):
        for j in range(4):
            if (i, j) in visible:
               # The current position is in visible...

            if board[i][j] == EMPTY_SPOT:
                print(EMPTY_SPOT)
            else:
                print(HIDDEN_CARD, end=EMPTY_SPOT)
        print()

Вы можете проверить, является ли кортеж координат in коллекцией visible. Также избегайте установки изменяемых объектов в качестве значений параметров по умолчанию, поскольку поведение может быть немного неожиданным .

...