好的,
所以我想我快到了
当它们独立运行时,我的第一部分/第二部分工作完美,但是我无法将两者结合在一起
这就是我到目前为止
我在想错误在最后一点,
抱歉,我是python的新手,所以我希望尽快掌握它
Edit3:我已经使其工作(在你们的帮助下),但是现在当我输入3782822463100050时,它应该是无效的美国运通卡,但它显示为有效的美国运通卡...
编辑1:好的,例如,当我发布0378282246310005
(假美国运通)时说
Traceback (most recent call last):
File "C:/Users/Nat/Desktop/attempt.py", line 39, in <module>
print((cardType)+"Valid")
NameError: name 'cardType' is not defined
但是当我插入一个像
0378282246310005
这样的随机数时请输入您的信用卡号码0378282246310005
我们不接受这种卡
Edit2:最后,您应该可以输入信用卡号,并且会显示“您的“信用卡类型”有效(或无效))
或说“我们不支持该卡”
#GET number that will be tested
CreditNumber = input("Please enter your credit card number")
#SET total to 0
total=0
#LOOP backwards from the last digit to the first, one at a time
CreditCount = len(CreditNumber)
for i in range(0, CreditCount, -1):
LastDigit=CreditCard[i]
#IF the position of the current digit is even THEN DOUBLE the value of the current digit
if i % 2 ==0:
LastDigit=LastDigit*2
#IF the doubled value is more than 9 THEN SUM the digits of the doubled value
if LastDigit>9:
LastDigit=LastDigit/10+LastDigit%10
total=total + digit
#Figure out what credit card the user has
if ( CreditNumber[0:2]=="34" or CreditNumber[ 0:2 ] == "37"):
cardType = "Your American Express is"
elif ( CreditNumber[ 0 :4 ] =="6011"):
cardType = "Your Discover card is"
elif ( CreditNumber[0 :2 ] in [ "51", "52", "53", "54", "55"]):
cardType = "Your Mastercard is"
elif ( CreditNumber == "4" ):
cardType = "Your VISA card is"
else:
print( "We do not accept that kind of card")
if total % 10 == 0:
print((cardType)+"Valid")
else:
print((cardType)+"Invalid")
最佳答案
在注释#Figure out what credit card the user has
下的控制语句中,变量cardType
在除else
之外的每个分支中定义。由于名称从未在控制语句的范围之外定义,因此当代码遵循if语句的else分支时,当您尝试访问变量时,解释器将为您提供NameError。
要解决此问题,您可以做几件不同的事情。您可以在cardType
无效时为CardNumber
创建一个特殊值,并在下一条控制语句中进行检查:
if ...:
...
else:
cardType = "some special value"
if cardType == "some special value":
...
或者您可以使用try / except语句:
try:
print(cardType)
except NameError:
print("invalid card number")
编辑:另外,您还应注意,当前
total
变量将始终为0
,因为for循环实际上并未运行。如果要减小范围,则第一个参数应大于第二个参数,否则range函数将仅创建一个空列表。