-2

我这里有这个功能:

def swap_cards(deck, index_deck):
    swap_deck = []
    after_index = []
    bandf_index = []
    if index_deck >= len(deck):
        for i in range(0, len(deck) + 1):
            if deck[i] == index_deck:
                after_index += [deck[0]]
            else:
                bandf_index += [deck[i]]
        swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index

每次我尝试输入大于或等于甲板长度的索引时,我都会收到错误“列表索引超出范围”

例子:

swap_cards([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9)

我期望[9, 1, 2, 3, 4, 5, 6, 7, 8, 0]但我却得到“列表索引超出范围”。

切换最后一个和第一个数字,我不知道我做错了什么。

4

1 回答 1

1

len() 有问题。假设您的 index_deck 为 9,如上例所示:

if index_deck >= len(deck):
    for i in range(0, len(deck) + 1):

此范围将产生 [0,1,2,3,4,5,6,7,8,9,10,11]

        if deck[i] == index_deck:
            after_index += [deck[0]]

由于数组索引是从零开始的,所以上面的行会产生错误。甲板[10] 和甲板[11] 不存在。

        else:
            bandf_index += [deck[i]]

修复上述语句也将解决此问题(同样,如果该语句为假len(),您可以尝试访问 deck[10] 。if

    swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index

最后一件事:您验证if index_deck >= len(deck):. 这将打破上述行,deck[index_check]因为在这里您将始终访问不存在的索引。

于 2013-10-14T00:56:58.200 回答