from cs50 import get_int, get_string
#Asking User For Credit Card Number
def main():
while True:
Credit_Card = str(get_int("Enter Credit Card Number: "))
if Credit_Card != "":
break
cardCheck(cardSum, Credit_Card)
def cardSum(Credit_Card):
even = 0
odd = 0
CC = len(Credit_Card)
if (CC == 0):
return 0
else:
if (CC % 2 == 0):
last = int(Credit_Card[-1])
even += last
return even + cardSum(Credit_Card[:-1])
else:
last = int(Credit_Card[-1])
last = last * 2
oddDigits = last // 10 + last % 10
odd += oddDigits
return odd + cardSum(Credit_Card[:-1])
#Checking is card valid or not
def cardCheck(cardSum,Credit_Card):
Total = cardSum(Credit_Card)
if (Total % 10 == 0):
if (len(Credit_Card) == 15) and (int(Credit_Card[0:2]) in [37, 34]):
print("AMEX")
elif (len(Credit_Card) == 16) and (int(Credit_Card[:2]) in range(50, 56)):
print("MASTER CARD")
elif (len(Credit_Card) in [13, 16]) and (int(Credit_Card[:1]) == 4):
print("VISA")
else:
print("INVALID")
else:
print("INVALID")
if __name__ == "__main__":
main()
我无法理解为什么我的程序不能正确输出这些美国运通卡号:37828224631005371449635398431在我的C实现的信用卡中,这两张卡显示的是美国运通 但在python中,它显示为无效的输出 这对大师来说很好,维萨
我认为问题在于您的代码使用了绝对奇偶校验,而不是相对奇偶校验。也就是说,我们从右边第二个到最后一个数字开始加倍,然后每隔一个数字向左。但两位数的符号奇偶性取决于原始数字的位数是奇数还是偶数。你的代码不能解释这一点
我们需要在开始时计算卡的奇偶校验,并通过递归
cardSum()
调用传递该奇偶校验,以便将正确的数字加倍:我猜这是美国运通推出的,因为它是一个奇数长度的数字。你测试过其他发卡行的奇数长度数字吗
相关问题 更多 >
编程相关推荐