如何优化基于首字母匹配形容词的Python简单姓名匹配脚本
优化方案
你的思路完全正确,用首字母直接匹配对应形容词的映射关系,就可以完全替代冗长的多层elif判断,同时还能修复原代码里的隐藏bug。
原代码存在的问题
- 26层elif逻辑冗余,后续维护修改成本高
- 存在逻辑bug:首字母为
L的分支错误调用了k对应的形容词Kind - 存在语法错误:Python字符串是不可变类型,原代码中
nameinput[0] = ()的写法会直接抛出类型错误 - 输入容错差:强制要求用户输入大写开头的姓名,否则无法正常处理
核心优化思路
用字典存储首字母和形容词的键值映射关系,拿到姓名首字母后直接查字典就能拿到对应形容词,不需要逐字母做相等判断。
优化后完整代码
# 首字母到形容词的映射表,替代零散的单字母变量 ADJECTIVE_MAP = { "A": "Awesome", "B": "Brave", "C": "Couragous", "D": "Daring", "E": "Energetic", "F": "Fun", "G": "Great", "H": "Heartfelt", "I": "Imaginative", "J": "Joyful", "K": "Kind", "L": "Lawful", "M": "Maternal", "N": "Nice", "O": "Open", "P": "Positive", "Q": "Quirky", "R": "Resourceful", "S": "Smooth", "T": "Talkative", "U": "Understanding", "V": "Victorious", "W": "Wacky", "X": "Xenial", "Y": "Young", "Z": "Zany" } def generate_nickname(name_input: str): # 处理空输入的异常场景 stripped_name = name_input.strip() if not stripped_name: print("Please enter a valid name!") return # 取首字母自动转大写,兼容小写开头的输入 first_char = stripped_name[0].upper() # 直接从映射表取对应形容词,无多层判断 match_adj = ADJECTIVE_MAP.get(first_char) if match_adj: # 自动格式化姓名为首字母大写 formatted_name = first_char + stripped_name[1:].lower() print(f"{match_adj} {formatted_name}!") else: print("I didn't quite understand that, try another name?") if __name__ == "__main__": # 测试用例 generate_nickname("Andrew") # 输出 Awesome Andrew! generate_nickname("lisa") # 自动处理小写,输出 Lawful Lisa!
优化收益
- 代码量缩减60%以上,逻辑清晰,后续要调整某个首字母对应的形容词,只需要修改映射表中的对应条目即可,不需要改动业务逻辑
- 修复了原代码的逻辑bug和语法错误
- 输入兼容性更强,支持小写开头、全大写等不规范格式的姓名输入,自动格式化输出
- 用f-string做字符串格式化,比多次加号拼接更易读
内容的提问来源于stack exchange,提问作者Joel Andrew Gibson
相关产品推荐
相关产品推荐

