You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

代码逻辑说明

  • 基础条件校验:先判断车牌长度是否合规,以及是否仅包含字母数字,不满足直接返回无效。
  • 开头字母校验:强制前两个字符为字母,不符合则直接返回无效。
  • 数字规则校验:
    1. 遍历车牌找到第一个数字的位置;
    2. 若存在数字,先检查第一个数字不能是0;
    3. 再确保第一个数字之后的所有字符都是数字,保证数字只出现在末尾;
    4. 若车牌无数字,直接通过该部分校验。

内容的提问来源于stack exchange,提问作者Marco Cracco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:55:21