对于一个免费的在线Python教程,我需要:
编写一个函数来检查给定的信用卡号是否有效。函数check(S)
应该将字符串S
作为输入。首先,如果字符串不符合"#### #### #### ####"
(其中每个#
都是一个数字),则它应该返回False
。然后,如果数字之和可以被10
整除(“校验和”方法),则过程应返回True
,否则应返回False
。例如,如果S
是字符串"9384 3495 3297 0123"
,则尽管格式正确,但数字和为72
,因此应返回False
。
下面显示了我所得到的结果。我认为我的逻辑是正确的,但不太明白为什么它给了我错误的值。是代码中有结构问题,还是我使用了错误的方法?
def check(S):
if len(S) != 19 and S[4] != '' and S[9] != '' and S[14] != '':
return False # checking if the format is correct
S = S.replace(" ",'') # Taking away spaces in the string
if not S.isdigit():
return False # checking that the string has only numbers
L = []
for i in S:
i = int(i) # Making a list out of the string and converting each character to an integer so that it the list can be summed
L.append(i)
if sum(L)//10 != 0: # checking to see if the sum of the list is divisible by 10
return False
4条答案
按热度按时间kkih6yb81#
我们不是在测试空格,而是在测试 * empty * 字符串,当在python字符串上使用直接索引时,您永远不会发现这一点。
此外,如果这4个条件中的任何一个为真,就应该返回
False
,而不是如果它们同时为 * 所有 * 真:接下来,替换空格,但不要再检查长度。如果我给你19个空格:
最后,您需要首先收集所有数字,并检查是否存在 * 余数 *:
如果所有测试都通过了,不要忘记返回True:
在最后。
把所有这些放在一起,你会得到:
whlutmcx2#
下面是一个基于正则表达式的方法:
y0u0uwnf3#
这是我的方法,这是一个有点长的代码,但我喜欢使用定义函数。由于某种原因,代码不工作的计算机科学界的网站,但它的工作在PyCharm程序。
pobjuy324#
这是我的方法,目前正在学习Python,还没有看到这样的答案: