Credit card validator in Python 3.7.1
up vote
1
down vote
favorite
I am doing some projects so I can teach myself programming. The one that I finished states:
"Credit Card Validator - Takes in a credit card number from a common credit card vendor and validates it to make sure that it is a valid number (look into how credit cards use a checksum)."
Would be glad if i can get a constructive feedback on this one.
import sys
cardnumb_input = input('Enter your credit card number: ')
def list_tweak():
try:
cardnumb = [int(i) for i in cardnumb_input]
cardnumb[0::2] = [x * 2 for x in cardnumb[0::2]]
cardnumb = [str(i) for i in cardnumb]
cardnumb = list(''.join(cardnumb))
cardnumb = [int(i) for i in cardnumb]
return cardnumb
except ValueError:
print('Please enter only number in format: xxxxxxxxxxxxxxxx')
sys.exit(1)
def valid_or_not():
total = sum(list_tweak())
if total % 10 != 0:
print('It seems that this credit card number is not valid.')
else:
print('This credit card number is valid. ')
valid_or_not()
python beginner python-3.x programming-challenge checksum
add a comment |
up vote
1
down vote
favorite
I am doing some projects so I can teach myself programming. The one that I finished states:
"Credit Card Validator - Takes in a credit card number from a common credit card vendor and validates it to make sure that it is a valid number (look into how credit cards use a checksum)."
Would be glad if i can get a constructive feedback on this one.
import sys
cardnumb_input = input('Enter your credit card number: ')
def list_tweak():
try:
cardnumb = [int(i) for i in cardnumb_input]
cardnumb[0::2] = [x * 2 for x in cardnumb[0::2]]
cardnumb = [str(i) for i in cardnumb]
cardnumb = list(''.join(cardnumb))
cardnumb = [int(i) for i in cardnumb]
return cardnumb
except ValueError:
print('Please enter only number in format: xxxxxxxxxxxxxxxx')
sys.exit(1)
def valid_or_not():
total = sum(list_tweak())
if total % 10 != 0:
print('It seems that this credit card number is not valid.')
else:
print('This credit card number is valid. ')
valid_or_not()
python beginner python-3.x programming-challenge checksum
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I am doing some projects so I can teach myself programming. The one that I finished states:
"Credit Card Validator - Takes in a credit card number from a common credit card vendor and validates it to make sure that it is a valid number (look into how credit cards use a checksum)."
Would be glad if i can get a constructive feedback on this one.
import sys
cardnumb_input = input('Enter your credit card number: ')
def list_tweak():
try:
cardnumb = [int(i) for i in cardnumb_input]
cardnumb[0::2] = [x * 2 for x in cardnumb[0::2]]
cardnumb = [str(i) for i in cardnumb]
cardnumb = list(''.join(cardnumb))
cardnumb = [int(i) for i in cardnumb]
return cardnumb
except ValueError:
print('Please enter only number in format: xxxxxxxxxxxxxxxx')
sys.exit(1)
def valid_or_not():
total = sum(list_tweak())
if total % 10 != 0:
print('It seems that this credit card number is not valid.')
else:
print('This credit card number is valid. ')
valid_or_not()
python beginner python-3.x programming-challenge checksum
I am doing some projects so I can teach myself programming. The one that I finished states:
"Credit Card Validator - Takes in a credit card number from a common credit card vendor and validates it to make sure that it is a valid number (look into how credit cards use a checksum)."
Would be glad if i can get a constructive feedback on this one.
import sys
cardnumb_input = input('Enter your credit card number: ')
def list_tweak():
try:
cardnumb = [int(i) for i in cardnumb_input]
cardnumb[0::2] = [x * 2 for x in cardnumb[0::2]]
cardnumb = [str(i) for i in cardnumb]
cardnumb = list(''.join(cardnumb))
cardnumb = [int(i) for i in cardnumb]
return cardnumb
except ValueError:
print('Please enter only number in format: xxxxxxxxxxxxxxxx')
sys.exit(1)
def valid_or_not():
total = sum(list_tweak())
if total % 10 != 0:
print('It seems that this credit card number is not valid.')
else:
print('This credit card number is valid. ')
valid_or_not()
python beginner python-3.x programming-challenge checksum
python beginner python-3.x programming-challenge checksum
edited 18 mins ago
200_success
127k15149412
127k15149412
asked 6 hours ago
skyn37
434
434
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
What should the type signature of these functions be?
I would really separate the IO from data. In addition, I would display data that you already have. I would not have valid_or_not
print stuff out. Instead I would have it return a value. But what value?
Furthermore, don't read global variables. valid_or_not
and list_tweak
should take paramters.
We'll get to printing stuff in the end.
What do you want to do with an invalid credit card number?
You are both throwing an error, and also printing out whether it is a valid card number. I would say there is a couple ways to go, but I prefer this approach:
Return an
enum
that ends up being either:VALID
,INVALID_CHECKSUM
, orINVALID_FORMAT
. Instead of doing printing.
Rework the flow of valid_or_not
.
Consider reworking valid_or_not
to do the following:
- Check to see if the format is valid, and return
INVALID_FORMAT
if it is not. - The run
list_tweak
, but don't dotry
-except
on it, return eitherINVALID_CHECKSUM
orVALID
depending onlist_tweak
.
Naming.
I am not sure what list_tweak
means, but I am assuming only because I've seen this problem show up time and time again that it is the Luhn algorithm. Name it something appropriate like luhn_checksum
.
IO
So what should we really be doing for input? First we should have a main
function (see the link for more information why. Thus we get:
def main():
cardnumber = input('Enter your credit card number: ')
print(valid_or_not(cardnumber))
if __name__ == '__main__':
main()
See all the data is manipulated in valid_or_not
which is then displayed, instead of displaying information withing valid_or_not
).
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
What should the type signature of these functions be?
I would really separate the IO from data. In addition, I would display data that you already have. I would not have valid_or_not
print stuff out. Instead I would have it return a value. But what value?
Furthermore, don't read global variables. valid_or_not
and list_tweak
should take paramters.
We'll get to printing stuff in the end.
What do you want to do with an invalid credit card number?
You are both throwing an error, and also printing out whether it is a valid card number. I would say there is a couple ways to go, but I prefer this approach:
Return an
enum
that ends up being either:VALID
,INVALID_CHECKSUM
, orINVALID_FORMAT
. Instead of doing printing.
Rework the flow of valid_or_not
.
Consider reworking valid_or_not
to do the following:
- Check to see if the format is valid, and return
INVALID_FORMAT
if it is not. - The run
list_tweak
, but don't dotry
-except
on it, return eitherINVALID_CHECKSUM
orVALID
depending onlist_tweak
.
Naming.
I am not sure what list_tweak
means, but I am assuming only because I've seen this problem show up time and time again that it is the Luhn algorithm. Name it something appropriate like luhn_checksum
.
IO
So what should we really be doing for input? First we should have a main
function (see the link for more information why. Thus we get:
def main():
cardnumber = input('Enter your credit card number: ')
print(valid_or_not(cardnumber))
if __name__ == '__main__':
main()
See all the data is manipulated in valid_or_not
which is then displayed, instead of displaying information withing valid_or_not
).
add a comment |
up vote
2
down vote
What should the type signature of these functions be?
I would really separate the IO from data. In addition, I would display data that you already have. I would not have valid_or_not
print stuff out. Instead I would have it return a value. But what value?
Furthermore, don't read global variables. valid_or_not
and list_tweak
should take paramters.
We'll get to printing stuff in the end.
What do you want to do with an invalid credit card number?
You are both throwing an error, and also printing out whether it is a valid card number. I would say there is a couple ways to go, but I prefer this approach:
Return an
enum
that ends up being either:VALID
,INVALID_CHECKSUM
, orINVALID_FORMAT
. Instead of doing printing.
Rework the flow of valid_or_not
.
Consider reworking valid_or_not
to do the following:
- Check to see if the format is valid, and return
INVALID_FORMAT
if it is not. - The run
list_tweak
, but don't dotry
-except
on it, return eitherINVALID_CHECKSUM
orVALID
depending onlist_tweak
.
Naming.
I am not sure what list_tweak
means, but I am assuming only because I've seen this problem show up time and time again that it is the Luhn algorithm. Name it something appropriate like luhn_checksum
.
IO
So what should we really be doing for input? First we should have a main
function (see the link for more information why. Thus we get:
def main():
cardnumber = input('Enter your credit card number: ')
print(valid_or_not(cardnumber))
if __name__ == '__main__':
main()
See all the data is manipulated in valid_or_not
which is then displayed, instead of displaying information withing valid_or_not
).
add a comment |
up vote
2
down vote
up vote
2
down vote
What should the type signature of these functions be?
I would really separate the IO from data. In addition, I would display data that you already have. I would not have valid_or_not
print stuff out. Instead I would have it return a value. But what value?
Furthermore, don't read global variables. valid_or_not
and list_tweak
should take paramters.
We'll get to printing stuff in the end.
What do you want to do with an invalid credit card number?
You are both throwing an error, and also printing out whether it is a valid card number. I would say there is a couple ways to go, but I prefer this approach:
Return an
enum
that ends up being either:VALID
,INVALID_CHECKSUM
, orINVALID_FORMAT
. Instead of doing printing.
Rework the flow of valid_or_not
.
Consider reworking valid_or_not
to do the following:
- Check to see if the format is valid, and return
INVALID_FORMAT
if it is not. - The run
list_tweak
, but don't dotry
-except
on it, return eitherINVALID_CHECKSUM
orVALID
depending onlist_tweak
.
Naming.
I am not sure what list_tweak
means, but I am assuming only because I've seen this problem show up time and time again that it is the Luhn algorithm. Name it something appropriate like luhn_checksum
.
IO
So what should we really be doing for input? First we should have a main
function (see the link for more information why. Thus we get:
def main():
cardnumber = input('Enter your credit card number: ')
print(valid_or_not(cardnumber))
if __name__ == '__main__':
main()
See all the data is manipulated in valid_or_not
which is then displayed, instead of displaying information withing valid_or_not
).
What should the type signature of these functions be?
I would really separate the IO from data. In addition, I would display data that you already have. I would not have valid_or_not
print stuff out. Instead I would have it return a value. But what value?
Furthermore, don't read global variables. valid_or_not
and list_tweak
should take paramters.
We'll get to printing stuff in the end.
What do you want to do with an invalid credit card number?
You are both throwing an error, and also printing out whether it is a valid card number. I would say there is a couple ways to go, but I prefer this approach:
Return an
enum
that ends up being either:VALID
,INVALID_CHECKSUM
, orINVALID_FORMAT
. Instead of doing printing.
Rework the flow of valid_or_not
.
Consider reworking valid_or_not
to do the following:
- Check to see if the format is valid, and return
INVALID_FORMAT
if it is not. - The run
list_tweak
, but don't dotry
-except
on it, return eitherINVALID_CHECKSUM
orVALID
depending onlist_tweak
.
Naming.
I am not sure what list_tweak
means, but I am assuming only because I've seen this problem show up time and time again that it is the Luhn algorithm. Name it something appropriate like luhn_checksum
.
IO
So what should we really be doing for input? First we should have a main
function (see the link for more information why. Thus we get:
def main():
cardnumber = input('Enter your credit card number: ')
print(valid_or_not(cardnumber))
if __name__ == '__main__':
main()
See all the data is manipulated in valid_or_not
which is then displayed, instead of displaying information withing valid_or_not
).
answered 59 mins ago
Dair
4,380727
4,380727
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209326%2fcredit-card-validator-in-python-3-7-1%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown