2016-10-17 13 views
2

Хорошо, Так что я думаю, что я почти там, моей первой/второй часть работы идеально, когда они сами по себе, но у меня возникают проблемы, сочетающие два это то, что я до сих пор Я думаю, ошибка в последнем бите, жаль, им новые с питоном, так что я надеюсь получить повесить его в ближайшее времяНе знаю, как исправить эту ошибку Луны Алгоритм PYTHON

EDIT3: Я получил он работает (с помощью вас, ребята), но теперь, когда я ввожу 3782822463100050, его предполагается быть недействительным для американского экспресса, но его показания действительны для американского экспресс ...

Edit1: Хорошо, к примеру, когда я отправляю 0378282246310005 (подделка American Express) он говорит

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") 
+1

Просьба пояснить, что именно не работает прямо сейчас? Показывать полную трассировку стека. Если у вас нет ошибок, какой результат вы получаете, что не соответствует вашим ожиданиям? Вы хотите собрать [mcve], чтобы помочь читателю узнать, как вам помочь. – idjaw

+0

Я добавил изменения! спасибо – NatalieRenee

+0

Это незначительная проблема, и это не имеет особого отношения к вашему вопросу, но вы должны рассмотреть возможность резервирования имен CapitalCase для имен классов, а не имен переменных. Это стандарт почти на каждом языке. –

ответ

1

в формулировках управления под комментарием #Figure out what credit card the user has, переменная cardType определяется в каждой отрасли, кроме else. Так как имя никогда не было определено вне области действия инструкции управления, интерпретатор дает вам NameError, когда вы пытаетесь получить доступ к переменной, когда код следовал за ветвью else инструкции if.

Чтобы исправить это, вы можете сделать пару разных вещей. Вы можете создать аа особое значение для cardType когда CardNumber является недействительным и проверять его в следующем операторе управления:

if ...: 
    ... 
else: 
    cardType = "some special value" 

if cardType == "some special value": 
    ... 

или вы могли бы использовать Try/за исключением заявления:

try: 
    print(cardType) 
except NameError: 
    print("invalid card number") 

EDIT: Также следует отметить, что в настоящее время переменная total всегда будет 0, поскольку цикл for фактически не запускается. Если вы хотите уменьшить диапазон, первый аргумент должен быть больше второго, или функция диапазона просто создаст пустой список.

+0

хорошо, что имеет смысл, но теперь я смущен. Как я могу позволить python знать, что «else» означает все, что не указано выше? Я думал, что это пункт «еще»? Я знаю, что думаю о неправильном пути:/ – NatalieRenee

+0

@NatalieRenee Просто создайте значение по умолчанию для 'cardType' перед вашими условными операторами.Возможно, в ответе можно привести пример, чтобы дать некоторую ясность – idjaw

+0

, или, может быть, мой ответ был не ясен. Я изменю его, чтобы показать некоторые примеры того, как его исправить. –