def CardNumber():
global card # Making variable global for function SumCardNumDigits(); see below
card = input() # Credit card number is entered
return card
def check(S):
CardNumber = S
SplitCardNum = CardNumber.split() # Split credit card number into a list, so we get [####, ####, ####, ####]
for i in range(0, len(SplitCardNum)): # Checking if each item in list has length of four strings and each item is
# an actual a number
if len(SplitCardNum[i]) == 4 and SplitCardNum[i].isdigit():
SplitCardNum.insert(i, True) # We add to a list a True value at position i
del SplitCardNum[i + 1] # We delete items at position i + 1
return SplitCardNum
def checkFormat(SplitCardNum):
if SplitCardNum == [True] * 4: # Checking if all above conditions are met in function check(S)
# So the returned value from previous function is a list [True, True, True, True]
return True
else:
return False
def SumCardNumDigits():
Ncard = card # Using global variable 'card' from function CardNumber()
SumN = 0
for i in Ncard: # Summing up all digits in string 'Ncard', if i position in a string is empty space " "
# we skip a step.
if i == " ":
continue
else:
SumN += int(i)
return SumN
def DivideByTen(SplitCardNum):
if SplitCardNum == True: # If conditions from function check(S) are met, we divide the sum of digits
# of credit card number by 10
SumNumber = SumCardNumDigits() % 10 # We do this by using the returned value of function SumCardNumDigits()
global SumNumber # <--- Fixed code
return SumNumber
else:
return False
def IsDivideByTen(SumNumber):
check = checkFormat(SplitCardNum) # Finally we check if the sum of digits of credit card number is divisible by 10
if SumNumber == 0 and check == True: # <--- Fixed code
return True
else:
return False
print(IsDivideByTen(DivideByTen(checkFormat(check(CardNumber()))))) # Output final result
# You can test this code at: http://cscircles.cemc.uwaterloo.ca/visualize/#mode=edit and see how it works.
# Try for '9384 3495 3297 4523' and '9384 3495 3297 4526'