福特汽车零件号拆解多字典匹配实现及代码优化咨询
福特零件号解析实现优化方案
当前需要解析格式为xxxx-xxxxxxx-x的福特汽车零件号,将其拆分为前缀、主码、后缀三段输出各段对应的零件属性,例如零件号7L3Z-14D696-A对应2007年福特F150卡车使用的、经过1次修订的加热元件。
已定义年份映射Years、产品线映射PL、设计责任方映射R_Code三个字典做匹配,原有代码不仅存在缩进错误,逻辑也有多处bug,且嵌套if判断过多效率较低,优化实现方案如下:
完整实现代码
# 年份映射字典(已将数字key转为字符串,适配输入字符匹配) Years = {"A": 2010, "B": 2011, "C": 2012, "D": 2013, "E": 2014, "F": 2015, "G": 2016, "H": 2017, "J": 2018, "K": 2019, "L": 2020, "M": 2021, "N": 2022, "P": 2023, "R": 2024, "S": 1995, "T": 1996, "V": 1997, "W": 1998, "X": 1999, "Y": 2000, "1": 2001, "2": 2002, "3": 2003, "4": 2004, "5": 2005, "6": 2006, "7": 2007, "8": 2008, "9": 2009} # 产品线映射字典 PL = { "S1": "Aspire", "S2": "Contour", "S4": "Escort/Focus", "S5": "Ka", "S6": "Fiesta", "S7":"Mondeo", "S8": "Probe", "S9": "Mystique", "M1": "Tracer", "F1":"Taurus", "F2": "Windstar", "F3":"Continental", "F4":"Sable", "F5": "Villager", "F6":"Thunderbird", "F7": "EN158", "F8": "FW178", "L1":"Bronco", "L2":"Explorer", "L3": "F150/F250", "L4": "Maverick 4X4", "L5": "Ranger", "L6": "Aerostar", "R1": "Aston-Martin", "R2": "Falcon", "R3": "Mustang", "R4": "Scorpio", "R5": "Fairlane", "R6": "LTD", "R8": "Jaguar S-Type", "R9": "Mark VIII", "W2": "Cougar", "W3": "Grand Marquis", "W4": "DEW98", "W5": "EW171", "W6": "Thunderbird RWD", "W7": "EN114 Crown Vic", "W8": "Jaguar XK8/XKR", "W9": "Jaguar XJ-Series", "C1": "Transit", "C2": "Econoline", "C3": "Medium Truck", "C4": "L-Series/Cargo-CF Series Truck", "U1":"Power Products", "U2": "Motorcraft Brand", "U3": "Outside Sales", "U4": "#3" } # 设计责任方映射字典 R_Code = { "A": "Light Truck Engineering", "B": "Body Engineering", "C": "Chassis Engineering", "D": "Overseas Product Engineering", "E": "Engine Engineering, Engine Product and Manufacturing Engineering", "F": "Electronics Division, Product Engineering Offc" , "G": "Electronics Division, Arbor Plant" , "H": "Climate Control Division, Product Engineering Offc" , "J": "Ford Customer Svc. Division Parts and Accessories Engineering Offc" , "K": "Import Component Engineering, Body Engineering" , "L": "Ford Customer Svc. Division Power Products/Ford Cust. Svc. Engineering" , "M": "Performance Operations, Special Vehicle Operations" , "P": "Transmission and Axle Product and Manufacturing Engineering (Automatic Transmissions)" , "R": "Transmission and Axle Product and Manufacturing Engineering (Manual Transmissions)", "S": "Light/Heavy Truck Engineering, Truck Special Order Department" , "T": "Heavy Truck Engineering" , "U": "Electrical and Fuel Handling Division, Product Energy Office", "V": "Domestic Special Order Engineering Section, Car Special Order and Special Vehicle Engineering" , "W": "Transmission and Axle Product and Manufacturing Engineering (Axle and Driveline)" , "X": "Plastic and Trim Products Division" , "Y": "Ford Customer Service Division (Lincoln and Mercury), Product Analysis and Publications" , "Z": "Ford Customer Service Division (Ford), Product Analysis and Publications" , "8": "Electric Vehicle Engineering", "5": "Ford PN96/UN98 Platform Engineering" } def parse_ford_part(part_no: str): # 统一输入预处理:去空格转大写 part_no = part_no.strip().upper() # 拆分三段并校验格式 parts = part_no.split('-') if len(parts) !=3 or len(parts[0])!=4 or len(parts[1])!=7 or len(parts[2])!=1: return "零件号格式错误,正确格式为 xxxx-xxxxxxx-x" prefix, main_code, suffix = parts # 字典直接查找,无冗余if判断,查找效率为*O(1)* year = Years.get(prefix[0], "未知年份") prod_line = PL.get(prefix[1:3], "未知产品线") design = R_Code.get(prefix[3], "未知设计责任方") # 解析后缀修订版本 revision = f"第{ord(suffix)-ord('A')+1}次修订" if suffix.isalpha() else f"修订版本{suffix}" return f"零件属性:{year} {prod_line},设计责任方:{design},{revision}" # 调用示例 if __name__ == "__main__": part = input("请输入福特零件号:") print(parse_ford_part(part))
优化说明
- 修复了原有代码的逻辑bug:修正年份字典key类型不匹配、索引越界、前缀长度判断错误等问题
- 完全去除冗余嵌套if判断,利用字典自带的
get方法直接取值,不会出现键不存在报错 - 统一输入预处理逻辑,无需单独判断输入大小写
- 一次性完成全零件号格式校验,避免分段输入的逻辑漏洞
内容的提问来源于stack exchange,提问作者J.R.
相关产品推荐
相关产品推荐

