Python:信用卡数字验证

问题描述

我需要实现一个名为“verify”的函数,它接受一个名为“number”的参数,然后检查以下规则:

  1. 一个数字必须是 4。
  2. 第四位数字必须比第五位数字大一位;请记住,由于格式为####-####-####,因此它们由破折号分隔。
  3. 所有数字之和必须能被 4 整除。 4 如果将前两位数字视为两位数,将第七位和第八位视为两位数,则它们的总和必须为 100 到目前为止,这是我想出的:
  def verify(number) : # do not change this line!

    # write your code here so that it verifies the card number
    number_string = number.replace("-","")
    cardnumber = [int(n) for n in number_string]

    if cardnumber[0] != 4:
      return 1

    elif cardnumber[3] != cardnumber[4] + 1: 
      return 2

    elif sum(map(int,cardnumber)) % 4 != 0:
      return 3

    elif cardnumber[0:2] + cardnumber[6:8] != 100:
      return 4

    return True
    # be sure to indent your code!

    input = "4002-1001-0000" # change this as you test your function
    output = verify(input) # invoke the method using a test input
    print(output) # prints the output of the function
    # do not remove this line!

解决方法

您似乎忘记了您已经将 cardnumber 转换为整数列表。它不再是一个字符串,因此您不需要每次都使用 int。要计算您的总和,您只需要 cardnumber[0]*10+cardnumber[1]cardnumber[7]*10+cardnumber[8]

,

cardnumber 是一个列表。列表不能转换为整数。为此,您首先需要使用某种逻辑将列表转换为字符串和整数或直接转换为整数。

使用字符串到整数逻辑

elif int(''.join(cardnum[0:2])) + int(''.join(cardnum[7:9])) != 100: