Python姓名首字母匹配功能的大小写与匹配逻辑问题修复
问题原因
原代码的匹配逻辑存在两个核心漏洞:
- 没有限定字符匹配位置:只要目标字符出现在姓名的任意位置(不管是首字母还是中间字符,不管大小写)就会被判定为命中,比如输入
S时,Negin Soleimani的姓首字母是S、Sina Ghahremani的名首字母是S、Masoud Jahani的名中间包含s,都会被错误匹配。 - 没有拆分姓名结构:列表内所有姓名都是「名 + 空格 + 姓」的结构,原代码没有拆分名和姓,自然无法精准匹配名首字母、姓首字母的规则。
修复逻辑
按照需求调整匹配规则即可:
- 对用户输入做去空格、转大写处理,兼容小写输入、误输入空格的场景
- 遍历姓名时,先按空格拆分出独立的名和姓
- 仅提取名的首字母、姓的首字母,统一转大写后和用户输入做精确比对,符合条件才输出姓名
修复后完整代码
names = ['Arsalan Ghasemi', 'Ali Bahonar', 'Negin Soleimani', 'Farzaneh Talebi', 'Sina Ghahremani', 'Saman Sorayaie', 'Abtin Tavanmand', 'Masoud Jahani', 'Roya Pendar', 'Zeynab Arabi', 'Amirhossein Tajbakhsh', 'Aria Irani'] def names_with_input(input1, input2): target_first = input1.strip().upper() target_last = input2.strip().upper() for full_name in names: first_name, last_name = full_name.split() # 仅匹配名首字母、姓首字母 if first_name[0].upper() == target_first and last_name[0].upper() == target_last: print(full_name) first = input('Enter first letter: ') last = input('Enter last letter: ') names_with_input(first, last)
效果验证
- 输入
A和G时,仅输出Arsalan Ghasemi,符合示例要求 - 输入两个
S时,仅输出Saman Sorayaie,解决原逻辑的多匹配问题 - 输入小写字符(比如输入
a和g)也能正常匹配,大小写兼容性正常
内容的提问来源于stack exchange,提问作者Ali Ebadi
相关产品推荐
相关产品推荐

