为了账号安全,请及时绑定邮箱和手机立即绑定

这一段是怎么比较分数的??小白一个请教

    def __cmp__(self, s):
        if self.score==s.score:
            return cmp (self.name,s.name)
        return -cmp (self.score,s.score)

正在回答

3 回答

这里用到的cmp(x, y)是Python2的一个内置函数,功能是如果x>y返回1,x<y返回-1,x==y返回0。

你贴出的代码中是在分数相等的情况下,比较当前对象的name和s对象的name。(比较首字母的Ascii码大小)否则就是比较两个对象的分数,加个负号作用就是从大到小排序。

0 回复 有任何疑惑可以回复我~

sort函数是默认从低到高貌似,但是题目要求从高到低。所以在cmp (self.score,s.score)添加一个-号。以此来转换排序,原本排在前面返回-1,但是现在是返回1,就是排在后面

1 回复 有任何疑惑可以回复我~

你把代码这样写:

class Student(object):


    def __init__(self, name, score):

        self.name = name

        self.score = score


    def __str__(self):

        return '(%s: %s)' % (self.name, self.score)


    __repr__ = __str__


    def __cmp__(self, s):

        if self.score == s.score:

            return cmp(self.name,s.name)

            

        elif self.score < s.score:

            return 1

        elif self.score > s.score:

            return -1 

            


L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]

print sorted(L)

这样好理解些,给出的return -cmp(self.score,s,score)我也没有理解是什么意思

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255750    人
  • 解答问题       2946    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

这一段是怎么比较分数的??小白一个请教

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信