tystudy 发表于 2023-11-17 11:29:05

python作业

本帖最后由 tystudy 于 2023-11-17 13:25 编辑

def isValid(number):
   

isdkz 发表于 2023-11-17 11:29:12

在您的代码中,存在一个问题,即在isValid函数中的以下行:

if not (number in ['4', '5', '37', '6']):


这个条件语句会一直返回False ,因为number是一个字符,而不是一个字符串。因此,您需要修改这行代码,使其能正确地检查信用卡号的开头数字。

您可以使用以下代码来替换上述行:

if number not in ['4', '5', '3', '6']:


这样就能正确地检查信用卡号的开头数字了。希望这能帮到您!

tystudy 发表于 2023-11-17 11:31:03

isdkz 发表于 2023-11-17 11:29
在您的代码中,存在一个问题,即在isValid函数中的以下行:




还是不对

Mike_python小 发表于 2023-11-17 11:31:42

从你提供的代码来看,可能存在一些问题导致输入4388576018410707显示为invalid。

首先,根据Luhn算法,信用卡号的验证过程中涉及到对偶数位数字进行加权求和并处理大于等于10的情况,以及对奇数位数字进行简单求和。在你的代码中,以及之前我提供的修正后的代码中,对 getDigit 函数的实现存在一些问题。

下面是修改后的 getDigit 函数的代码:


def getDigit(number):
    total = 0
    for i in range(len(number) - 2, -1, -2):# 修正遍历偶数位数字的方式
      digit = int(number) * 2
      if digit >= 10:
            digit = digit // 10 + digit % 10
      total += digit
    return total


另外,你还需要注意一点,用户输入信用卡号时可能包含空格或其他非数字字符,你可以使用 number = input("Enter your credit card number: ").replace(" ", "") 来删除空格。

最后,你需要考虑到输入的信用卡号可能不符合 Luhn 算法的要求,比如长度不在 13 到 16 位之间或者不以特定的开头数字开头。在这些情况下,你的 isValid 函数应该返回 False,并且程序应该相应地处理这些情况。

希望这能帮助你找到问题所在!
页: [1]
查看完整版本: python作业