鱼C论坛

 找回密码
 立即注册
查看: 1572|回复: 3

[已解决]python作业

[复制链接]
发表于 2023-11-17 11:29:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

微信图片_20231117111631.png 微信图片_20231117111636.png 微信图片_20231117111719.png 微信图片_20231117111742.png def isValid(number):  
   
最佳答案
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[i]) * 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,并且程序应该相应地处理这些情况。

希望这能帮助你找到问题所在!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-17 11:29:12 | 显示全部楼层
在您的代码中,存在一个问题,即在  isValid  函数中的以下行:
if not (number[0] in ['4', '5', '37', '6']):

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

您可以使用以下代码来替换上述行:
if number[0] not in ['4', '5', '3', '6']:

这样就能正确地检查信用卡号的开头数字了。希望这能帮到您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-17 11:31:03 | 显示全部楼层
isdkz 发表于 2023-11-17 11:29
在您的代码中,存在一个问题,即在  isValid  函数中的以下行:

还是不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]) * 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,并且程序应该相应地处理这些情况。

希望这能帮助你找到问题所在!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表