CS50P PSET2 Vanity Plates问题求助:数字规则未满足
解决Vanity Plates的数字规则问题
你的原代码中is_valid函数的逻辑存在问题:使用or连接条件会导致只要满足任意一个条件就返回有效,这完全不符合题目要求;同时完全未处理数字位置和首数字不为0的规则。以下是修正后的完整代码:
def main(): plate = input("Plate: ") if is_valid(plate): print("Valid") else: print("Invalid") def is_valid(s): # 规则2、4:长度在2-6之间,仅含字母或数字 if not (2 <= len(s) <= 6) or not s.isalnum(): return False # 规则1:必须以至少两个字母开头 if not s[:2].isalpha(): return False # 规则3:数字需在末尾,首个数字不能为0 first_digit_pos = None for index, char in enumerate(s): if char.isdigit(): first_digit_pos = index break if first_digit_pos is not None: # 检查首个数字不能是0 if s[first_digit_pos] == '0': return False # 检查第一个数字之后的所有字符必须都是数字 for char in s[first_digit_pos+1:]: if not char.isdigit(): return False return True main()
代码逻辑说明
- 基础条件校验:先判断车牌长度是否合规,以及是否仅包含字母数字,不满足直接返回无效。
- 开头字母校验:强制前两个字符为字母,不符合则直接返回无效。
- 数字规则校验:
- 遍历车牌找到第一个数字的位置;
- 若存在数字,先检查第一个数字不能是0;
- 再确保第一个数字之后的所有字符都是数字,保证数字只出现在末尾;
- 若车牌无数字,直接通过该部分校验。
内容的提问来源于stack exchange,提问作者Marco Cracco
相关产品推荐
相关产品推荐

