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

如何优化基于首字母匹配形容词的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:48:28