如何完善Python代码实现名字排名查询与结果输出功能?
完善名字流行度查询程序
以下是满足需求的完整代码,同时优化了文件读取和查询逻辑:
# 初始化存储男孩和女孩名字数据的字典,键为小写名字,值为(排名, 使用人数) boy_name_data = {} girl_name_data = {} # 读取男孩名字文件,记录排名与使用人数 with open('boynames.txt', 'r') as boy_file: # enumerate从1开始计数,直接对应排名 for rank, line in enumerate(boy_file, start=1): name, count = line.strip().split() boy_name_data[name.lower()] = (rank, int(count)) # 读取女孩名字文件,记录排名与使用人数 with open('girlnames.txt', 'r') as girl_file: for rank, line in enumerate(girl_file, start=1): name, count = line.strip().split() girl_name_data[name.lower()] = (rank, int(count)) # 持续接收用户输入直到输入"-1" while True: user_input = input('Enter a name (-1 to exit): ') if user_input == '-1': print('Exiting program') break # 统一名字格式:小写用于字典查询,首字母大写用于输出 normalized_name = user_input.lower() display_name = normalized_name.capitalize() # 查询男孩名字排名 if normalized_name in boy_name_data: boy_rank, boy_count = boy_name_data[normalized_name] print(f"{display_name} is ranked {boy_rank} in popularity among boys with {boy_count} namings.") else: print(f"{display_name} is not in the top 1000 boy names.") # 查询女孩名字排名 if normalized_name in girl_name_data: girl_rank, girl_count = girl_name_data[normalized_name] print(f"{display_name} is ranked {girl_rank} in popularity among girls with {girl_count} namings.") else: print(f"{display_name} is not in the top 1000 girl names.")
关键优化点说明
- 文件读取安全:使用
with语句自动管理文件资源,避免手动关闭文件的遗漏。 - 排名直接获取:利用
enumerate(start=1)直接从文件行号得到排名,无需额外计算。 - 大小写兼容:字典键存储小写名字,用户输入无论大小写都能匹配查询。
- 循环交互逻辑:通过
while True实现持续输入,直到用户输入-1退出程序。 - 完整查询反馈:同时处理男孩和女孩名字的查询,不存在时给出明确提示。
内容的提问来源于stack exchange,提问作者Tarun REX
相关产品推荐
相关产品推荐

