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

我的Python Vanity Plate校验代码为何始终返回Invalid?

你的代码问题分析

1. 长度校验完全错误

你写的has_valid_length函数要求车牌必须恰好6个字符,但标准 vanity plate 的长度规则是2到6个字符(包含2和6)。比如合法的"CS50"长度是4,直接被这个函数判定为无效,这是导致所有非6位的合法车牌都返回Invalid的根本原因。

修复代码:

def has_valid_length(s):
    return 2 <= len(s) <= 6

2. 格式校验逻辑严重缺失

你的has_valid_format只覆盖了两个特定车牌和「前两位字母+后面全数字」的情况,但漏掉了大量合法场景:

  • 全字母的车牌(比如"ABC"、"HELLO")
  • 未校验「一旦出现数字,后面必须全是数字」的规则(比如"AB1C"是无效的,但你的代码没做限制)
  • 未校验第一个数字不能为0的规则(比如"AB012"是无效的,但你的代码会认为它合法)

正确的格式校验逻辑应该:

  1. 车牌必须以至少两个字母开头
  2. 一旦出现数字,后面所有字符必须都是数字
  3. 第一个出现的数字不能是0
  4. 不能有纯数字的车牌

修复后的示例代码:

def has_valid_format(s):
    # 开头必须是两个及以上字母
    if not s[:2].isalpha():
        return False
    
    digit_started = False
    for idx, char in enumerate(s):
        if char.isdigit():
            digit_started = True
            # 第一个数字不能是0
            if idx == 2 and char == '0':
                return False
        else:
            # 已经出现数字后不能再出现字母
            if digit_started:
                return False
    return True

3. 额外说明

你的has_valid_characters函数是正确的,s.isalnum()确实能确保车牌只有字母和数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:43:07