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
相关产品推荐
相关产品推荐

