使用 list.pop() 从矩阵中删除元素将返回 None 或列表索引错误



我正在尝试创建一个存储卡游戏,在其中我创建一个卡片矩阵并使用用户输入。用户输入矩阵的行和列,匹配它们会从矩阵中删除卡片。我创建了一个矩阵,用户可以在其中选择卡片,但是我在创建删除匹配对的函数时遇到问题。

import random
matrix = None
def create_deck():
    ranks = ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
    suits = ['♠', '♥', '♣', '♦']
    deck = []
    for rank in ranks:
        for suit in suits:
            card = str(rank) + suit
            deck.append(card)
    random.shuffle(deck)
    global matrix
    matrix = [[[random.choice(deck), '🂮'] for i in range(13)]for j in range(4)]
    count = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
    for i in count:
        print(i, end=' ')
    print('')
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            print((matrix[i][j][1]), end = ' ')
        print('')
def get_card():
    row_input = input("Enter row of desired card")
    col_input = input("Enter column of desired card")
    global row
    global col
    row = int(row_input)
    col = int(col_input)
    return matrix[row][col][0]
def remove_pairs():
    matrix[row][col].pop()
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            print((matrix[i][j][1]), end = ' ')
        print('')
if __name__=="__main__":
    create_deck()
    p1_score = 0
    p2_score = 0
    card1 = None
    card2 = None
    while True:
        card1 = get_card()
        card2 = get_card()

pop()指定的卡后,它要么返回None,要么返回列表索引错误。我在remove_pairs()函数中做错了什么?

当你从牌组中弹出卡时,matrix[row][col]中的物品最初是("牌","🂮"),之后它变成了("牌")。因此,当您尝试打印矩阵并找到matrix[i=row][j=col][1]时,该项目只有一个元素,并且您正在尝试访问第二个元素,并且由于它不存在,因此它为您提供了一个IndexError。以下是该问题的建议解决方案:

def remove_pairs():
    matrix[row][col].pop()
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            try:
                print((matrix[i][j][1]), end = ' ')
            except IndexError:
                print("  ")
        print('')

最新更新