我的列表值更改不正确 - python

my list value changing incorrectly - python

我正在尝试生成万事达卡卡号。 要求 : 第一个元素必须是 5 第二个元素必须介于 1 和 5 之间 最后一个元素必须是从 luhn 算法返回的 lcheck 数字。

我有luhn算法的校验位功能,目前一切正常。 但是当我在 generateMasterCard 函数中将我的卡号参数提供给 generateCheckDigit 函数时,我的卡号被乘以 2 返回,在 luhn 算法中相隔一个元素。

抱歉我的英语不好

代码如下:

def generateCheckDigit(numbers):

    if len(numbers)%2 == 1:
        for i in range(0,len(numbers),2):
            numbers[i] *= 2
    else:
        for i in range(1,len(numbers),2):
            numbers[i] *= 2

    check_digit = (sum(numbers)*9) % 10

    return check_digit


def generateMasterCard():
    
    card_number = [5, rd.randint(1,5)]

    for i in range(13):
        card_number.append(rd.randint(0,9))

    print(f"first number : {card_number}")

    check_digit = generateCheckDigit(card_number)

    card_number.append(check_digit)

    return card_number

输出:

first number : [5, 4, 1, 4, 0, 8, 4, 8, 0, 4, 2, 8, 8, 2, 9]
[10, 4, 2, 4, 0, 8, 8, 8, 0, 4, 4, 8, 16, 2, 18, 4]

您可以import copy并将generateCheckDigit(copy.copy(card_number))用作
Alexey Larionov 在评论中说“在 Python 中,如果您向函数传递一些复杂的值,例如 class 实例、列表、字典等,那么您的函数可以自由修改它。在您的情况下,您可以这样做操作 numbers[i] *= 2 并更改您传递的列表”。传递副本可以避免这种情况。