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

为Python汽车库存程序添加VIN功能 限制用户仅输入17位字符

问题背景

正在开发汽车库存管理程序,需要添加VIN录入功能。功能不需要校验VIN本身的合法性,仅需限制用户输入的VIN长度为17位。目前已编写的代码中VIN长度校验逻辑存在问题,需要正确的实现方式。

原有问题代码
#Automobile Inventory
print('Automobile Inventory')
class Automobile:
    def __init__(self):
        self._make = ""
        self._model = ""
        self._year = 0
        self._color = ""
        self._mileage = 0
        self._vin = ""
    def addVehicle(self):
        try:
            self._make = input('Enter vehicle make: ')
            self._model = input('Enter vehicle model: ')
            self._year = int(input('Enter vehicle year: '))
            self._color = input('Enter vehicle color: ')
            self._mileage = int(input('Enter vehicle mileage: '))
            self._vin = input('Enter vehicle vin number: ')
            if len(self._vin) == 17:
                        print("ERROR: Vin must be 17 digits or less.")
            return True
        except ValueError:
            print("ERROR: Year and mileage must be numerical")
            return False
    def __str__(self):
        return '\t'.join(str(x) for x in [self._make, self._model, self._year, self._color, self._mileage, self._vin])
原有逻辑问题
  • 校验条件写反:代码在VIN长度等于17位(即符合要求的场景)时触发报错,和需求完全相悖
  • 错误提示不准确:需求要求VIN固定为17位,原提示写的是“VIN必须为17位及以下”,和规则不匹配
  • 校验无阻断效果:就算触发长度报错,代码依然会返回True,不符合长度要求的VIN仍会被正常存入
  • 未兼容误输入场景:没有处理用户输入时首尾不小心多加的空格,很容易导致长度计算错误
修正后可直接运行的代码
# 汽车库存管理
print('汽车库存管理')
class Automobile:
    def __init__(self):
        self._make = ""
        self._model = ""
        self._year = 0
        self._color = ""
        self._mileage = 0
        self._vin = ""
    def addVehicle(self):
        try:
            self._make = input('请输入车辆品牌:').strip()
            self._model = input('请输入车辆型号:').strip()
            self._year = int(input('请输入车辆出厂年份:'))
            self._color = input('请输入车辆颜色:').strip()
            self._mileage = int(input('请输入车辆行驶里程:'))
            self._vin = input('请输入车辆VIN码:').strip()
            # 正确的VIN长度校验逻辑
            if len(self._vin) != 17:
                print("错误:VIN码长度必须为17位")
                return False
            return True
        except ValueError:
            print("错误:出厂年份和行驶里程必须为数字")
            return False
    def __str__(self):
        return '\t'.join(str(x) for x in [self._make, self._model, self._year, self._color, self._mileage, self._vin])
修正点说明
  • 将校验条件从len(self._vin) == 17改为len(self._vin) != 17,仅在长度不符合17位要求时触发报错
  • 修正错误提示文案,明确VIN固定17位的规则
  • 长度校验不通过时直接返回False,阻断错误数据录入
  • 所有字符串输入增加strip()处理,自动去除首尾误输入的空格,避免无意义的校验失败
  • 所有交互提示、报错信息统一翻译为中文,符合国内使用习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:42:25