【发布时间】:2020-11-29 00:31:27
【问题描述】:
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()
我无法弄清楚为什么我的程序无法使用这些 AMEX 卡号:378282246310005、371449635398431 在我的 C 实现的积分中,这两张卡显示 AMEX 但在python中它显示INVALID作为输出 对Master,Visa来说很好用
【问题讨论】:
-
你能解释一下 cardSum 应该做什么吗?它应该只计算卡片数字的总和吗?
标签: python algorithm recursion cs50 luhn