如何在给定Python程序中按性别分类并将姓名按字母顺序打印
解决方案
原代码存在以下可优化/问题点:
- 滥用
exec执行动态代码存在安全风险,且逻辑冗余 - 打印女性列表时错误使用男性列表的长度作为循环边界,男女数量不一致时会触发索引越界报错
- 缺少对姓名按字母排序的逻辑
修改后可运行代码
n = int(input()) f = [] m = [] for i in range(n): temp = input() tmplst = temp.split(".") # 若需要保留原代码的打印动态语句逻辑,可放开以下两行注释 # str = f"{tmplst[1]} = ({','.join(repr(i) for i in tmplst)})" # print(str) if tmplst[0] == "m": m.append(tmplst) elif tmplst[0] == "f": f.append(tmplst) # 按姓名字段(列表索引1位置)做字母升序排序 f.sort(key=lambda x: x[1]) m.sort(key=lambda x: x[1]) # 打印女性名单 for item in f: print(item[0], item[1].capitalize(), item[2]) # 打印男性名单 for item in m: print(item[0], item[1].capitalize(), item[2])
关键改动说明
- 移除了所有
exec相关逻辑,直接将拆分后的信息存入对应性别列表,代码更安全简洁 - 增加排序步骤:通过
sort()方法指定姓名为排序关键字,默认按英文字母升序排列,符合需求 - 修正了循环打印逻辑,直接遍历列表本身,完全避免索引越界问题
内容的提问来源于stack exchange,提问作者smartnima
相关产品推荐
相关产品推荐

