如何在Python学生记录管理程序中实现字母排序?
如何用sorted()实现学生记录的字母排序显示
要实现按字母顺序排序并支持升降序选择,你需要在view_records()函数中做以下修改:
1. 添加排序方向选择逻辑
在读取文件前,先让用户选择升序或降序,动态控制排序的方向参数。
2. 读取记录并执行排序
由于csv.reader是一次性迭代器,先把所有行读取到列表中,再用sorted()按指定字段排序。
修改后的view_records函数代码
import csv student_info = ['Student ID', 'First name', 'last name', 'age', 'address', 'phone number'] database = 'file_records.txt' def view_records(): global student_info global database print("--- Student Records ---") # 获取用户排序方向选择 while True: sort_choice = input("请选择排序方向:1. 升序(A-Z) 2. 降序(Z-A):").strip() if sort_choice in ['1', '2']: reverse = sort_choice == '2' break print("输入无效,请选择1或2") with open(database, "r", encoding="utf-8") as f: reader = csv.reader(f) # 将所有记录转为列表,方便排序操作 records = list(reader) # 打印表头 for x in student_info: print(x, end='\t |') print("\n-----------------------------------------------------------------") # 按姓氏(last name)字母排序,不区分大小写 sorted_records = sorted(records, key=lambda row: row[2].lower(), reverse=reverse) # 打印排序后的记录 for row in sorted_records: for item in row: print(item, end="\t |") print("\n") input("Press any key to continue")
关键代码说明
sorted(records, key=lambda row: row[2].lower(), reverse=reverse):key=lambda row: row[2].lower():指定按第3列(last name)排序,.lower()确保大小写字母统一排序(比如"Smith"和"smith"不会因大小写打乱顺序)。reverse=reverse:根据用户选择切换升/降序,True为降序,False为升序。
list(reader):将csv读取器转为列表,避免迭代器只能遍历一次的限制,方便后续排序和打印。
如果需要按名字(First name)排序,只需把row[2]改成row[1]即可,对应student_info中的索引位置。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

