亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

這一段是怎么比較分數的??小白一個請教

??? 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進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

這一段是怎么比較分數的??小白一個請教

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號