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

Python生成ID编号时无法获取最后三位数字的技术求助

问题:无法正确生成ID编号的最后三位数字

我无法获取ID编号的最后三位数字,当前代码运行后存在数据匹配错误的问题:

from datetime import datetime
def days_to_birthday(date): 
    datetime_object = datetime.strptime(date, "%Y-%m-%d")
    date = datetime_object.date()
    num_days = date.timetuple().tm_yday
return num_days
fo = open("Data.txt", 'r') # 存储数据的文件
content = [i.rsplit() for i in fo.readlines()]
names = [content[i][0] for i in range(len(content))]
dates = [content[i][1] for i in range(len(content))]
gender = [content[i][2] for i in range(len(content))]
id_numbers = []
mydict = dict(zip(dates, gender))

for i in mydict:
    x = days_to_birthday(i)
    if mydict.get(i) == "F":x += 500
    x = str(x)
    if len(x) < 3:x = x.zfill(3)
    i = i.split('-')
    out = i[0] + x
    id_numbers.append(out)
for i in range(len(names)):
    print(f"{names[i]} {id_numbers[i]}" )

问题原因

  1. 数据丢失:使用dict(zip(dates, gender))会丢弃重复日期对应的性别数据——字典的键唯一,重复日期会被后续条目覆盖,导致id_numbers的长度小于names的长度,运行时会触发索引错误。
  2. 顺序混乱:字典遍历的顺序无法保证和原始数据一致,最终会出现姓名与ID不匹配的情况。

修正后的代码

from datetime import datetime

def days_to_birthday(date): 
    datetime_object = datetime.strptime(date, "%Y-%m-%d")
    date = datetime_object.date()
    num_days = date.timetuple().tm_yday
    return num_days

# 用with语句自动管理文件资源
with open("Data.txt", 'r') as fo:
    content = [line.strip().split() for line in fo.readlines()]

id_numbers = []
# 直接遍历每条原始数据,确保无丢失、顺序一致
for name, date, gender in content:
    day_of_year = days_to_birthday(date)
    if gender == "F":
        day_of_year += 500
    # 统一格式化为三位数字,不足补零
    last_three = str(day_of_year).zfill(3)
    year = date.split('-')[0]
    id_num = f"{year}{last_three}"
    id_numbers.append(id_num)

# 配对输出姓名与ID
for name, id_num in zip([item[0] for item in content], id_numbers):
    print(f"{name} {id_num}")

修正说明

  • 改用with语句操作文件,无需手动关闭,更安全规范。
  • 直接遍历原始数据列表,保留所有条目且顺序与输入一致,避免数据丢失和匹配错误。
  • 简化变量逻辑,直接解包每条数据的姓名、日期、性别,代码可读性更强。
  • 用str.zfill(3)统一处理三位数字格式,替代手动判断长度的冗余代码。

内容的提问来源于stack exchange,提问作者Chamika Jayasinghe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:05:22