Validating credit card - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Validating credit card (/thread-13869.html) |
Validating credit card - frequency - Nov-04-2018 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? RE: Validating credit card - gontajones - Nov-04-2018 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 stringA better way to write this function: def checker(s): return s.replace(' ','').replace('-','')The replace() already search in every char of the string.
RE: Validating credit card - frequency - Nov-04-2018 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: ' ' RE: Validating credit card - gontajones - Nov-04-2018 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 RE: Validating credit card - frequency - Nov-05-2018 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" RE: Validating credit card - gontajones - Nov-05-2018 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] .
RE: Validating credit card - frequency - Nov-05-2018 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 RE: Validating credit card - frequency - Nov-05-2018 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 RE: Validating credit card - frequency - Nov-05-2018 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() |