ZBLOG

def isValid(number): summary = sumOfDoubleEvenPlace(number) + sumOfOddPlace(number) if summary % 10 == 0: print('The number is valid') else: print('The number is invalid') def sumOfDoubleEvenPlace(number): return s...

这个程序存在一些问题:

  1. getDigit 函数中,对于超过10的数字,计算出错。应该将 digit1 // 10 + digit1 % 10 修改为 [digit1 // 10, digit1 % 10],以保持返回一个列表。

  2. sumOfOddPlace 函数中,对于输入长度为奇数的情况下可能会出错。可以在函数开头添加一个判断条件来处理这种情况。

  3. main 函数中,在调用 isValid(number) 前没有对输入的信用卡号进行有效性检查(如长度、合法字符等)。建议添加相应的检查逻辑。

修正后的代码如下所示:

def isValid(number):
    summary = sumOfDoubleEvenPlace(number) + sumOfOddPlace(number)
    if summary % 10 == 0:
        print('The number is valid')
    else:
        print('The number is invalid')

def sumOfDoubleEvenPlace(number):
    return sum(getDigit(number))

def getDigit(number):
    i = -2
    digitEven = []
    while True:
        try:
            digit1 = int(number[i])
            if digit1 * 2 < 10:
                digitEven.append(digit1 * 2)
                i -= 2
            else:
                digitEven += [digit1 // 10, digit1 % 10]
                i -= 2

        except IndexError:
            break
    return digitEven

def sumOfOddPlace(number):
    i = -1
    digitOdd = []
    while True:
        try:
            digit2 = int(number[i])
            digitOdd.append(digit2)
            i = i - 2
        except IndexError:
            break
    return sum(digitOdd)

def main():
    number = input('Please enter your credit card number: ')
    if len(number) < 13 or len(number) > 16:
        print('Invalid credit card number')
        return
    for char in number:
        if not char.isdigit():
            print('Invalid credit card number')
            return
    isValid(number)

main()

这样修改后的程序可以正确判断信用卡号的有效性,并且会对输入进行一定的有效性检查。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=10234

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?