python - 使用给定标准验证信用卡号
问题描述
我已经学习 Python 一个星期了,这是我第一次做一些编码。
正如标题所说,我遇到了这个问题。我为规则#1 和规则#2 写的内容还可以,但对于规则 3 和 4,它就行不通了。
给定的标准是:
- 如果第 1 位 =4 则通过或返回 1(违反第一条规则)
- 如果 4th dig > 5th dig 然后通过或返回 2(违反第二条规则)
- 所有数字的总和必须能被 4 整除或返回 3
- 如果将前两位视为两位数,第七位和第八位视为两位数,则它们的总和必须为 100 或返回 4
像这样:
def verify(number) : #
x= int(number[0]+number[1]+number[2]+number[3])
y= int(number[5]+number[6]+number[7]+number[8])
z= int(number[11]+number[12]+number[13]+number[10])
temp = int(x) + int(y) + int(z)
temp2 = int(number[1]+number[0])
temp3 = int(number[8]+number[7])
sum1 = int(number[0])+int(number[1])+int(number[2])+int(number[3])+int(number[5])+int(number[6])+int(number[7])+int(number[8])+int(number[11])+int(number[10])+int(number[12])+int(number[13])
sum2 = temp2 + temp3
if int(number[0]) != 4:
return 1
#rule1
elif int(number[3]) <= int(number[5]) and int(number[0]) == 4:
return 2
#rule2
elif sum1 % 4 != 0 and number[3] > number[5] and number[0] == 4:
return 3
#rule3
elif sum1 % 4 == 0 and number[3] > number[5] and number[0] == 4 and sum2 != 100:
return 4
#rule4
else:
return True
print("the entered credit number is","output")
input = "9000-0000-0000" #It can vary to test the code
output = verify(input)
对不起我糟糕的英语(我不是本地人)
解决方案
How about you create a seperate function for the sum of all digits requirement, you have the first two requirements pretty much correct:
def verify(number_str):
# if 1st digit = 4 then passed or return 1 (violated 1st rule)
if int(number_str[0]) != 4:
return 1
# if 4th dig > 5th dig then passed or return 2 (violated 2nd rule)
elif int(number_str[3]) <= int(number_str[5]):
return 2
# the sum of all digits must be evenly divisible by 4 or return 3 (violated 3rd rule)
elif get_sum_of_digits(number_str) % 4 != 0:
return 3
# if you treat the first two digits as a two-digit number and the seventh
# and eighth digits as a two-digit number, their sum must be 100 or return 4
elif int(number_str[0:2]) + int(number_str[7:9]) != 100:
return 4
# the number is valid otherwise
return True
def get_sum_of_digits(number_str):
total = 0
for char in number_str:
if char.isdigit(): # to ignore the `-` characters
total += int(char)
return total
Example Invalid Usage 1:
input_number = "9000-0000-0000"
output = verify(input_number)
if isinstance(output, bool):
print("The entered credit number is valid.")
else:
print(f"The entered credit number is not valid. Error code: {output}")
Output:
The entered credit number is not valid. Error code: 1
Example Invalid Usage 2:
input_number = "4007-6000-0000"
Output:
The entered credit number is not valid. Error code: 3
Example Valid Usage:
input_number = "4002-0060-0000"
Output:
The entered credit number is valid.
推荐阅读
- python - 错误:无法在烧瓶中导入“file_name”
- json - 我将如何在 Dart 中为颤振项目访问此 JSON 数据?
- c++ - Asio 独立 async_connect 连接后不调用回调
- ios - 在 iOS 13.4 中,嵌套 ForEach 中的 SwiftUI ObservedObject 不再像 iOS 13.3 中那样更新 View
- sql - Select with Row_Number using join. Fetching last three customers with their respective addresses
- javascript - 试图测试一个不和谐的机器人;macOS 终端不断出现错误
- mysql - 并排的两个查询 - 共同的月/年(MYSQL)
- python - 根据这些条件增加和减少一个值
- excel - 如何将基于列 A 重复名称的整行复制到 VBA 中其各自的工作表中?
- go - Jenkins GO 运行失败,出现 git 128