CS50P个性车牌校验is_valid如何确保字符串首个数字不为0
CS50P 车牌校验函数补全
你现在写的is_valid已经覆盖了大部分规则,只差第一个出现的数字不能是0这一条,直接在原来遍历找数字的循环里加判断就行,不用重构整体逻辑。
补全思路
原有循环是从左到右遍历字符串,第一次碰到数字的位置就是整个字符串里首个数字的位置,刚好在这里加判断:
- 如果这个首个数字是字符
'0',直接返回False判定无效 - 原有「数字出现后后面必须全是数字」的逻辑保留
- 处理完首个数字直接break循环就行,不用继续往后扫,减少不必要的遍历
补全后的完整代码
def main(): plate = input("Plate: ") if is_valid(plate): print("Valid") else: print("Invalid") def is_valid(s): if len(s) < 2 or len(s) > 6: return False if s[0].isdigit() or s[1].isdigit(): return False for i in range(len(s)): if s[i].isdigit(): # 新增:首个数字不能为0 if s[i] == '0': return False if not s[i:].isdigit(): return False # 找到第一个数字处理完就退出循环 break if not s.isalnum(): return False return True main()
校验效果验证
- 输入
CS50、AB1234、HI这类合法号牌,会正常返回Valid - 输入
CS05、AB012这类首个数字为0的号牌,会正确返回Invalid - 之前能拦截的非法场景(长度不符、前两位是数字、数字夹在字母中间、带特殊符号)依然可以正常拦截
内容的提问来源于stack exchange,提问作者TheSudoCat
相关产品推荐
相关产品推荐

