目錄
題目描述
輸入
輸出
樣例輸入
樣例輸出
題目分析:注意兩點
思路分析:
代碼詳解:
題目描述
給出n個學(xué)生的姓名和成績,將學(xué)生成績從高到低排序,成績相同的學(xué)生,按照姓名拼音從小到大排序
輸入
輸入包括多行,第一行是一個整數(shù)n(0<n<10),接下來有n行,每一行有學(xué)生姓名和兩門課的成績
輸出
輸出排序后的結(jié)果:排序原則:將學(xué)生成績從高到低排序,成績相同的學(xué)生,按照姓名拼音從小到大排序。
樣例輸入
3 tom 80 90 jack 80 78 lucy 81 77
樣例輸出
tom 80 90 jack 80 78 lucy 81 77
題目分析:注意兩點
1.降序排序
2.成績相同時,字典序小的名字在前
思路分析:
1.用字典:姓名作為鍵,成績作為鍵值
2.用sorted進行排序文章來源:http://www.zghlxwxcb.cn/news/detail-518350.html
代碼詳解:
n=int(input())
dt={}
for i in range(n):
s=input().split()
dt[s[0]]=(int(s[1]),int(s[2]))#將姓名作為鍵,將兩科成績放在一個元組里邊作為鍵值
l=sorted(dt.items(),key=lambda x:(-(x[1][0]+x[1][1]),x[0]))#排序過程有詳解
for x in l:
print(x[0],x[1][0],x[1][1])#最后輸出
排序過程詳解:首先通過上邊的循環(huán)構(gòu)造了一個姓名作為鍵,兩科成績放在一個元組里面作為鍵值的字典,用dt.items()取所有的鍵和值放在一個列表里邊,未經(jīng)排序的dt.items()為[(tom,(80,90)),(jack,(80,78)),(lucy,(81,77))],通過sorted的另一個參數(shù)key來控制排序方法。
先考慮成績不同時的過程:因為sorted默認是從小到大排,所以取兩門成績之和的相反數(shù)-(x[1][0]+x[1][1]),(x[1][0]+x[1][1])越大則其相反數(shù)就越小,所以成績中最高的就在前邊,
接下來考慮成績相同的情況:因為最后返回的是一個元組(-(x[1][0]+x[1][1]),x[0]),元組比較大小是逐個比較的當?shù)谝粋€參數(shù)元素相同時即比較第二個,因為sorted默認是從小到大排所以,當分數(shù)相同時,姓名字母序小的在前。
?加油?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-518350.html
到了這里,關(guān)于成績排序(思路+代碼詳解)Python實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!