Hello,
I have been trying to make a credit card validator but i keep getting an error. I have created a special fuction that removes the empty spaces and "-"s from the string.
def checker(string):
for i in range (len(string)):
if " " in string:
string = string.replace(' ','')
elif "-" in string:
string = string.replace('-','')
This is my total code
def digit_sum(LIST):
for i in range(len(LIST)):
value = str(LIST[i])
digits = [int(x) for x in value]
credit_card.append(sum(digits))
def checker(string):
for i in range (len(string)):
if " " in string:
string = string.replace(' ','')
elif "-" in string:
string = string.replace('-','')
credit_card=[]
credit_card_sum=[]
credit_card_sum_digit=[]
credit_digits_sum=0
user_input=input()
checker(user_input)
while user_input!="end" and user_input!="END":
credit_card_str=str(user_input)
credit_card_int=[int(x) for x in credit_card_str]
if credit_card_int[0]<4 or credit_card_int[0]>7:
print ("False")
else:
for i in range(len(credit_card_int)):
if not (i% 2):
credit_card_int[i] = credit_card_int[i]*2
digit_sum(credit_card_int)
for i in range(len(credit_card)):
credit_digits_sum=credit_digits_sum+credit_card[i]
if credit_digits_sum % 2 ==0:
print ("True")
else:
print ("False")
user_input=input()
If you try to run in with the input
5497-3571-7063-2130 or
54 97357 170632 130 You will get an error like
this. Should i reconvert the string to STR?
You have to return the new (modified) string.
def checker(string):
for i in range (len(string)):
if " " in string:
string = string.replace(' ','')
elif "-" in string:
string = string.replace('-','')
return string
A better way to write this function:
def checker(s):
return s.replace(' ','').replace('-','')
The
replace()
already search in every char of the string.
When running the program python breaks on line
credit_card_int=[int(x) for x in user_input]
error code
Traceback (most recent call last):
File "python", line 22, in <module>
File "python", line 22, in <listcomp>
ValueError: invalid literal for int() with base 10: ' '
This is happening because your not actually removing the ' ' and/or '-' from input.
Try this:
def digit_sum(LIST):
for i in range(len(LIST)):
value = str(LIST[i])
digits = [int(x) for x in value]
credit_card.append(sum(digits))
def checker(s):
return s.replace(' ','').replace('-','')
credit_card=[]
credit_card_sum=[]
credit_card_sum_digit=[]
credit_digits_sum=0
user_input=input()
user_input = checker(user_input) # <===== HERE
while user_input!="end" and user_input!="END":
credit_card_str=str(user_input)
credit_card_int=[int(x) for x in credit_card_str]
if credit_card_int[0]<4 or credit_card_int[0]>7:
print ("False")
else:
for i in range(len(credit_card_int)):
if not (i% 2):
credit_card_int[i] = credit_card_int[i]*2
digit_sum(credit_card_int)
for i in range(len(credit_card)):
credit_digits_sum=credit_digits_sum+credit_card[i]
if credit_digits_sum % 2 ==0:
print ("True")
else:
print ("False")
user_input=input()
user_input = checker(user_input) # <===== HERE
Thank you for your reply. I am getting the same error.
[b]Traceback (most recent call last):
File "python", line 18, in <module>
File "python", line 18, in <listcomp>
ValueError: invalid literal for int() with base 10: '-'[/b]
After this my goal is to make the program print "False" when it detects other user inputs like these "
5497.3571,7063*2130".So i must exclude dots,commas and asterisks,and weird inputs like these "
54 97357 170632 130"
Could you please post your current code?
Because line 18 in my code is while user_input!="end" and user_input!="END":
.
And in yours seems to be credit_card_int=[int(x) for x in credit_card_str]
.
Yea,sorry for this. I keep on making many versions of the code so i keep experimenting. Take my code
def digit_sum(LIST):
for i in range(len(LIST)):
value = str(LIST[i])
digits = [int(x) for x in value]
credit_card.append(sum(digits))
def checker(s):
return s.replace(' ','').replace('-','')
credit_card=[]
credit_card_sum=[]
credit_card_sum_digit=[]
credit_digits_sum=0
user_input=input()
user_input = checker(user_input) # <===== HERE
while user_input!="end" and user_input!="END":
credit_card_str=str(user_input)
credit_card_int=[int(x) for x in credit_card_str]
if credit_card_int[0]<4 or credit_card_int[0]>=7:
print ("False")
else:
for i in range(len(credit_card_int)):
if not (i% 2):
credit_card_int[i] = credit_card_int[i]*2
digit_sum(credit_card_int)
for i in range(len(credit_card)):
credit_digits_sum=credit_digits_sum+credit_card[i]
if credit_digits_sum % 2 ==0:
print ("True")
else:
print ("False")
user_input=input()
user_input = checker(user_input) # <===== HERE
Changed code to
def digit_sum(LIST):
for i in range(len(LIST)):
value = str(LIST[i])
digits = [int(x) for x in value]
credit_card.append(sum(digits))
def checker(s):
list_of_numbers=[]
string_to_use=""
if("-" in s):
list_of_numbers=s.split("-")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if(" " in s):
list_of_numbers=s.split(" ")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("," in s):
list_of_numbers=s.split(",")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("*" in s):
list_of_numbers=s.split("*")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("." in s):
list_of_numbers=s.split(".")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
else:return s
credit_card=[]
credit_card_sum=[]
credit_card_sum_digit=[]
credit_digits_sum=0
user1_input=input()
user_input=checker(user1_input)
while user1_input!="end" and user1_input!="END":
user_input=checker(user1_input)
if( not user_input.isdigit()):
print("False")
elif(user_input.isdigit() and len(user_input)>16):
print("False")
else:
credit_card_int=[int(x) for x in user_input]
if credit_card_int[0]<4 or credit_card_int[0]>=7:
print ("False")
else:
for i in range(0,len(credit_card_int),2):
credit_card_int[i] = credit_card_int[i]*2
digit_sum(credit_card_int)
for i in range(len(credit_card)):
credit_digits_sum=credit_digits_sum+credit_card[i]
if credit_digits_sum %10 ==0:
print ("True")
else:
print ("False")
user1_input=input()
but outputs wrong bool with input 54 97357 170632 130
done
def checker(s):
list_of_numbers=[]
string_to_use=""
if("-" in s):
list_of_numbers=s.split("-")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if(" " in s):
list_of_numbers=s.split(" ")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("," in s):
list_of_numbers=s.split(",")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("*" in s):
list_of_numbers=s.split("*")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
if("." in s):
list_of_numbers=s.split(".")
for character in list_of_numbers:
string_to_use+=character
string_return=string_to_use
string_to_use=""
return string_return
else:
return s
credit_card=[]
credit_card_sum=[]
credit_card_sum_digit=[]
credit_digits_sum=0
user1_input=input()
user_input=checker(user1_input)
check=False
while user1_input!="end" and user1_input!="END":
user_input=checker(user1_input)
if(len(user1_input)>16):
if(len(user1_input)!=19):
print("False")
user1_input=input()
continue
elif(user1_input[4].isdigit() or user1_input[9].isdigit() or user1_input[14].isdigit()):
print("False")
user1_input=input()
continue
if( not user_input.isdigit()):
print("False")
elif(user_input.isdigit() and len(user_input)!=16):
print("False")
else:
credit_card_int=[int(x) for x in user_input]
if credit_card_int[0]<4 or credit_card_int[0]>7:
print ("False")
else:
for i in range(0,len(credit_card_int),2):
credit_card_int[i] = credit_card_int[i]*2
if credit_card_int[i]>=10:credit_card_int[i]= (int(str(credit_card_int[i])[0])+int(str(credit_card_int[i])[1]))
if (sum(credit_card_int) % 10 ==0):
print ("True")
else:
print ("False")
user1_input=input()