1004 成績排名 (20 分)
注意:代碼滿分通過
讀入 n(>0)名學(xué)生的姓名褐奴、學(xué)號、成績,分別輸出成績最高和成績最低學(xué)生的姓名和學(xué)號两踏。
輸入格式:
每個測試輸入包含 1 個測試用例,格式為
第 1 行:正整數(shù) n
第 2 行:第 1 個學(xué)生的姓名 學(xué)號 成績
第 3 行:第 2 個學(xué)生的姓名 學(xué)號 成績
... ... ...
第 n+1 行:第 n 個學(xué)生的姓名 學(xué)號 成績
其中姓名
和學(xué)號
均為不超過 10 個字符的字符串兜喻,成績?yōu)?0 到 100 之間的一個整數(shù)梦染,這里保證在一組測試用例中沒有兩個學(xué)生的成績是相同的。
輸出格式:
對每個測試用例輸出 2 行朴皆,第 1 行是成績最高學(xué)生的姓名和學(xué)號帕识,第 2 行是成績最低學(xué)生的姓名和學(xué)號,字符串間有 1 空格遂铡。
輸入樣例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
輸出樣例:
Mike CS991301
Joe Math990112
代碼:
def main():
num = int(input()) # 學(xué)生的人數(shù)
D = {} # 將數(shù)據(jù)存儲為字典類型
L = [] # 用于存儲排序后的字典
for i in range(num):
line = input().split(" ")
D[line[1]] = [line[0], line[2]]
L = sorted(D.items(), key=lambda x: x[1][0])
print(L[len(D) - 1][1][0] + ' ' + L[len(D) - 1][0])
print(L[0][1][0] + ' ' + L[0][0])
if __name__ == "__main__":
main()
運(yùn)行結(jié)果:
運(yùn)行結(jié)果
總結(jié):
1.由于字典是不能進(jìn)行排序的肮疗,所以我們要將其轉(zhuǎn)化為其他類型再進(jìn)行排序。
2.字典一般根據(jù)key進(jìn)行排序扒接,這里我用的是根據(jù)值進(jìn)行排序伪货,而且這個值還是個列表。
[('Math990112', ['Joe', '89']), ('EE990830', ['Mary', '95']), ('CS991301', ['Mike', '100'])]
所以我只想到這一種實(shí)現(xiàn)方式钾怔,如果你們有更好的實(shí)現(xiàn)方式碱呼,歡迎留言!
3.關(guān)于為什么我要存成這樣的宗侦,因為我覺得使用學(xué)號作為關(guān)鍵字更合乎常識愚臀,而這道題也可以使用分?jǐn)?shù)作為關(guān)鍵字。