鱼C论坛

 找回密码
 立即注册
查看: 1940|回复: 6

[已解决]python 学生信息排序输出

[复制链接]
发表于 2020-12-3 11:07:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助!我的学生信息文件是这样的。filename=‘student.txt’
{'id': 1001, 'name': 'zz', 'chinese': 10, 'math': 10, 'english': 10}
{'id': 1002, 'name': 'xx', 'chinese': 20, 'math': 20, 'english': 20}
{'id': 1003, 'name': 'www', 'chinese': 1, 'math': 2, 'english': 50}
{'id': 100, 'name': '1', 'chinese': 14, 'math': 14, 'english': 45}

def sort():#定义的排序函数
    if os.path.exists(filename): #文件如果存在
        with open(filename,'r',encoding='utf-8') as rfile:  #只读打开
            stu_list=rfile.readlines()  #读取到stu_list的列表中
        stu_new = []                #定义一个新的列表
        for i in stu_list:          #遍历列表,将每一项转化为字典
            d=dict(eval(i))
            stu_new.append(d)       #成功将字典添加到列表的每一项
    else:
        print('目前没有学生信息可供排序!')
        return

    while True:
        try:
            choose=input('请选择排序方式:升序(1)/降序(2)')#sort 默认升序
            if choose=='1':
                flag=False
            elif choose=='2':
                flag=True
            else:
                print('排序方式输入有误,请重新输入!')
                continue
        except:
            print('输入为空,请重新选择排序方式!')
            continue

        num=input('按语文成绩排序(1),按数学成绩排序(2),按英语成绩排序(3),按总分排序(4)')
        if num == '1':
            stu_new.sort(key=lambda x:x['chinese'],reverse=choose)#此处出错。
        elif num == '2':
            stu_new.sort(key=lambda x:x['math'],reverse=choose)#此处出错。
        elif num == '3':
            stu_new.sort(key=lambda x:x['english'],reverse=choose)#此处出错。
        elif num == '4':
            stu_new.sort(key=lambda x:x['chinese']+x['math']+x['english'],reverse=choose)#此处出错。
        else:
            print('排序关键字输入有误,请重新选择!')
            continue

        show_student(stu_new)#将排序完的列表展示

错误信息提示:stu_new.sort(key=lambda x:x['chinese']+x['math']+x['english'],reverse=choose)#此处出错。
TypeError: an integer is required (got type str)

在输入完按语文或者数学排序后,程序直接报错。不能运行。
请大家帮忙看看,谢谢
最佳答案
2020-12-3 11:42:39
本帖最后由 suchocolate 于 2020-12-3 12:16 编辑

定义的函数名最好改成别的,它和list的方法sort重名了,虽然不干扰,但不推荐定义的函数和用到的方法重名,容易引起歧义。
stu_new.sort(key=lambda x:x['chinese']+x['math']+x['english'],reverse=flag)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-3 11:15:12 | 显示全部楼层
检查一下你的数据从文件读取到列表再存到字典里的过程
是不是有问题,存成了字符串
找不到就中途print一下,再测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-3 11:42:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2020-12-3 12:16 编辑

定义的函数名最好改成别的,它和list的方法sort重名了,虽然不干扰,但不推荐定义的函数和用到的方法重名,容易引起歧义。
stu_new.sort(key=lambda x:x['chinese']+x['math']+x['english'],reverse=flag)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 11:46:05 | 显示全部楼层

感谢,粗心大意了。用的flag。写的choose。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 12:00:34 | 显示全部楼层
suchocolate 发表于 2020-12-3 11:42
你定义的函数名最好改改,和list的sort重名了,不符合PEP8规范,我刚刚看还以为你要定义类。

谢谢。还是初学者,都不知道这个规范的问题。我会去自己看看的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-3 12:18:11 | 显示全部楼层
张晨旺 发表于 2020-12-3 12:00
谢谢。还是初学者,都不知道这个规范的问题。我会去自己看看的


纠正一下,查了下PEP8,没有规定重名的问题。
不过个人建议自定义函数和用到的原生方法重名,容易看错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-3 17:04:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 06:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表