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

Python代码IF语句异常:仅最后一位女性ID的生日天数加500

问题:女性ID生成时生日天数加500未正确执行

我编写了一段生成ID的Python代码,需求是对女性的生日天数(tm_yday)加500后作为ID的组成部分。但实际运行时,输入女性信息后并未正确执行加500操作,仅当连续输入多个女性信息时,最后一位女性的ID才会正确加上500。

代码实现

from datetime import datetime
from random import randint

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

file_name = input("")
input_file =  open(file_name , "r")
output_file =  open("output.txt", "w")
year_list = []

for lines in input_file:
    
    char_info = lines.split(" ")
    char_name = char_info[0]
    b_day = char_info[1]
    bDay_list = b_day.split("-")
    b_year = bDay_list[0]
    num_of_days = int(days_to_birthday(b_day))
    gender = char_info[2]
            
    year_list.append(b_year)
    count = year_list.count(b_year)
    
    if gender == "F":
        days = num_of_days + 500
    else:
        days = num_of_days
        
    part_1 = b_year
    part_2 = f'{days:03d}'
    part_3 = f'{count:03d}'
        
    ID_num = part_1+str(part_2)+str(part_3)
    new_line = char_name, ID_num
    output_file.write(str(new_line))
    print(new_line[0], new_line[1])

输入文件内容

Saman 1990-05-03 M  
Kumaran 1988-03-05 M  
Nazar 1997-09-24 M  
Ravindu 2001-03-21 M  
Nimasha 2001-08-10 F  
Aruni 1990-04-06 F  
Asha 2001-03-06 F  

问题原因

核心问题出在性别读取环节:输入文件中每行的性别字段后带有换行符或多余空格,导致char_info[2]获取到的不是纯"F"或"M",而是类似"F\n"的字符串。这使得gender == "F"的判断始终不成立,因此不会执行加500的操作。只有最后一行可能没有换行符,或者偶然匹配时才会生效。

解决方案

修复核心问题

对读取到的性别字段做去除空白字符的处理,使用strip()方法:

gender = char_info[2].strip()

额外优化建议

  • 用with语句管理文件:避免手动关闭文件可能带来的问题,代码更简洁安全:
    file_name = input("")
    with open(file_name, "r") as input_file, open("output.txt", "w") as output_file:
        # 原循环逻辑放在此处
    
  • 用字典统计年度人数:原代码用列表count方法每次都会遍历整个列表,效率较低,改用字典统计更高效:
    # 替换原year_list为字典
    year_count = {}
    
    # 循环内替换统计逻辑:
    if b_year not in year_count:
        year_count[b_year] = 0
    year_count[b_year] += 1
    count = year_count[b_year]
    

内容的提问来源于stack exchange,提问作者Ravidu Madhusanka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:20:37