Python Codewars题validate_pin校验函数编写正确性咨询
代码存在的问题
你的代码存在3个核心逻辑错误,完全不符合PIN校验的要求:
- 长度判断逻辑写反:当前代码只有当PIN长度不是4位也不是6位的时候才会进入字符校验逻辑,而PIN校验的要求是必须是4位或6位,所以长度不符合的时候应该直接返回False,长度符合的时候才需要校验字符。
- 字符校验逻辑提前返回:遍历字符的代码里,只要第一个字符是数字就会直接返回True,完全不会校验后续字符,比如输入
1a34会被误判为合法。另外return后的break完全是无效代码,函数return后就直接退出了,永远执行不到break。 - 缺少返回路径:当PIN长度是4位或6位时,你的代码没有任何返回逻辑,会默认返回None,导致合法PIN也会被判定为不通过。
修正后的参考代码
def validate_pin(atm): # 先校验长度是否符合要求 if len(atm) not in (4, 6): return False # 长度符合的情况下校验所有字符都是数字 for i in atm: if not i.isdigit(): return False # 所有校验都通过才返回True return True
如果要写的更简洁也可以直接用字符串方法一行实现:
def validate_pin(atm): return len(atm) in (4, 6) and atm.isdigit()
内容的提问来源于stack exchange,提问作者ismailali
相关产品推荐
相关产品推荐

