提示: 根据一些简单的算法,实现一个确定卡号是否有效的功能。假设信用卡号码是一个由14个字符组成的字符串,格式为####-####-####,包括破折号,其中“#”代表一个数字 在0到9之间,因此总共有12位数字。
目标:实现一个称为“ verify”的函数,该函数采用单个参数 称为“数字”,然后检查以下规则:
如果不满足条件,则根据失败的规则返回“ rule#X”。
我的进度:
def verify(number):
if len(number) != 14:
return False
if number[0] != 4:
print("rule#1")
if number[5] + 1 != number[3]:
print("rule#2")
if sum(number) != int:
print("rule#3")
if number[0,1] + number[6,7] != 100
print("rule#4")
return True #
input = "5000-0000-0000"
output = verify(input)
print(output)
我认为我在遇到第三个和第四个条件时遇到困难,但不确定该怎么做/如何处理它。
答案 0 :(得分:0)
对于第三个规则,您可以这样操作。删除'-'字符并添加所有数字。
strippedNum=number.replace('-','') # remove '-'
digits_sum = sum([int(digit) for digit in strippedNum]) # make a list with all the digits and find their sum
if sum_of_all % 4 != 0:
print(rule#3)
在第四种情况下,您可能会遇到错误,因为您试图将两个字符串连接起来并等于一个整数。
if int(number[0:1]) + int(number[6:7]) != 100 # Use [lower_limit:upper_limit] when extracting from a list
print("rule#4")
因此,这就是最终代码的外观(处理字符串和整数时要小心)
def verify(number):
valid = True
if len(number) != 14:
valid = False
if number[0] != '4': # number[0] is a string
print("rule#1")
valid = False
if number[5] < number[3]:
print("rule#2")
valid = False
strippedNum=number.replace('-','') # remove '-'
digits_sum = sum([int(digit) for digit in strippedNum]) # make a list with all the digits and find their sum
print(digits_sum)
if digits_sum % 4 != 0:
print("rule#3")
valid = False
if int(number[0:1]) + int(number[6:7]) != 100:
print("rule#4")
valid = False
return valid
input = "5000-0000-0000"
output = verify(input)
print(output)
此方法可一次打印所有故障并提供布尔输出。
答案 1 :(得分:0)
您应该return
字符串而不是打印字符串。对于第三条规则,可以使用模%
函数。这是一种方法(第四条规则几乎可以肯定得到改善...)
def verify(number):
if len(number) != 14 or int(number[0]) != 4:
return False
if int(number[0]) != 4:
return "rule#1"
if int(number[5]) + 1 != int(number[3]):
return "rule#2"
if sum(int(num) for num in number.replace("-","")) % 4 != 0:
return "rule#3"
if int(str(number[0] + str(number[1]))) + int(str(number[6] + str(number[7]))) != 100:
return "rule#4"
return True
input = "4501-0550-0000"
output = verify(input)
print(output)
答案 2 :(得分:0)
您可以尝试以下操作:
import re
def verify(number):
try:
## remove any spaces in begginng and end
number = number.strip()
## remove any spaces between numbers
number = re.sub("\s+","",number)
if len(number) != 14:
return False, "current number length is "+str(len(number)) + " but number is missing the expected length of 14."
if int(number[0]) != 4:
return False, "First digit must be 4. but received first digit is " + number[0]
if int(number[5]) + 1 != int(number[3]):
return False, "The fourth digit must be one greater than the fifth digit"
if sum([int(digit) for digit in re.sub("-","",input)]) % 4 != 0:
return False, "Sum of all digit is not divisible by 4"
if int(input[0:2]) + int(input[-2:]) != 100:
return False, "Sum of first two digit and last two digit is not 100"
return True, "All conditions are met"
except Exception as e:
print(e)
return False, "code got interrupted."
input = "4000-0000-0010"
output = verify(input)
print(output)
您可以通过output[0]
获取真/假和output[1]
获取消息的输出