请问各位这道题用Python怎么解呀

img

使用字符串切片和列表解析式解代码数比较少更简洁,可以这样写:

num='5432123456788881'
even=[2*int(x) if 2*int(x)<10 else 2*int(x)-9 for x in list(num[::2])]
print(even)
if sum([int(x) for x in list(num[1::2])])+sum(even)==70:
    print('pass')
else:
    print('access denied')

如对你有帮助,请点击这个回答的右上方采纳按钮支持一下。

如果有帮助的话,请点击右上角【采纳】按钮,支持一下!!



def lun(num):
    Odd = 0
    Even = 0
    for i in range(len(num)-1,-1,-2): #遍历奇数位的
        Odd += eval(num[i])

    for i in range(len(num)-1-1,-1,-2): #遍历偶数位的
        if eval(num[i])*2 >= 10:
            Even = Even + eval(num[i])*2 -9 
        else:
            Even = Even + eval(num[i])*2

    if (Odd + Even)%10 == 0:
        print("校验通过。")
    else:
        print("银行卡号有误!!")

        
num = "5432123456788881"
lun(num)

def check_card(numbers: str):
    """
        判断信用卡号是否通过lun算法校验
    :param numbers: str
    :return:        bool
    """
    number_list = list(numbers)
    r1 = number_list[::-1][::2]
    res1 = sum(int(i) for i in r1)
    r2 = number_list[::-1][1::2]
    res2 = 0
    for i in r2:
        val = int(i) * 2
        if 100 > val >= 10:
            val -= 9
        res2 += val
    count = res1 + res2
    if count % 10 == 0:
        return True
    return False

if __name__ == '__main__':
    res = check_card('5432123456788881')
    print(res)