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

如何优化患者账号生成程序:同名账号后缀加整数区分重复项

问题需求

现有一段生成患者账号名的Python代码,逻辑为读取文件中的患者姓名,提取姓氏与名字首字母组合生成小写账号名并存入列表。需要优化程序实现以下功能:当生成的账号名已存在时,在账号名后追加整数以区分重复账号,例如三个同名“abranch”的患者,第二个账号名为“abranch1”,第三个为“abranch2”。

原代码
patient_name = []  # 补充原代码遗漏的列表初始化
with open('all_patients.txt', 'r') as fh:
    for line in fh:
        splited_list = line.split()
        surname = splited_list[1]
        given_name = splited_list[0][0]
        patient_name_u = given_name + surname
        patient_name.append(patient_name_u.lower())

fh.close()
print(patient_name)
优化方案

通过计数字典跟踪每个基础账号名的出现次数,生成账号时根据计数决定是否追加数字,核心逻辑如下:

  • 用字典记录每个基础账号名的出现次数
  • 生成基础账号名后,若未出现过则直接使用,若已存在则追加当前计数,再更新计数
  • 新增异常输入处理,避免程序崩溃

优化后的代码:

patient_accounts = []
name_count = {}

with open('all_patients.txt', 'r') as fh:
    for line in fh:
        # 处理空行
        line = line.strip()
        if not line:
            continue
        splited_list = line.split()
        # 校验姓名格式是否符合「名字 姓氏」
        if len(splited_list) < 2:
            print(f"跳过格式错误的行: {line}")
            continue
            
        given_name = splited_list[0][0]
        surname = splited_list[1]
        base_name = (given_name + surname).lower()
        
        if base_name not in name_count:
            account = base_name
            name_count[base_name] = 1
        else:
            account = f"{base_name}{name_count[base_name]}"
            name_count[base_name] += 1
        
        patient_accounts.append(account)

# with语句会自动关闭文件,无需手动调用fh.close()
print(patient_accounts)
关键说明
  • 新增空行、格式错误行的处理逻辑,避免程序因异常输入崩溃
  • 沿用with语句自动管理文件资源,符合Python最佳实践
  • 计数字典name_count确保重复账号的后缀数字按顺序递增,完全匹配需求示例

内容的提问来源于stack exchange,提问作者Simon Cheung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:45:38