为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
相关产品推荐
相关产品推荐

