我不認為你把你認為的細節扯出來了。我要在什麼地方再檢查一遍。在
您的第乙個提示是keyerror: 1。這意味著,您已經為鍵1簽入了乙個dictionary,但它不存在(令人困惑,但它不是錯誤型別1,只是值1是導致錯誤的原因)。看著返回的行:if students[1] > students[2] & students[1] > students[3]:它將來自學生。這意味著students是乙個字典,1不是其中的鍵。在
其次,你沒有正確使用那些迴圈。檢查如何使用它的乙個很好的技巧是使用print語句呼叫函式。e、 gfor z in students.keys():
for x in students.items():
print(z, x)
# then comment out the rest of this loop
根據您給我們的前三行示例資料,將返回:
^$為什麼?因為您要用students.keys()遍歷每個學生的名字,對於每個學生,您將再次迴圈遍歷每個學生,並用students.items()提供鍵和值。我會花點時間弄清楚,因為這實際上是你最大的問題。在
你得到鑰匙錯誤的原因是什麼?因為您只使用students[...]檢查原始詞典。在
一旦你解決了這個問題,你就會遇到第三個問題。乙個indexerror,因為您使用whatever_you_are_checking[3]訪問3個元素score陣列的第4個元素。因為陣列的第乙個元素是索引0,第二個是1,第三個是{}。計算機科學家從0開始計數。在
所以。最終,您需要:只在學生身上繞了一圈。你只需要檢查每個名字一次
當你做檢查的時候要看分數,而不是學生陣列
以0為基數,而不是以1為基數進行比較
基本上,類似於:for z in students.keys():
if students[z][0] > students[z][1] and students[z][0] > students[z][2]:
print("...")
以下是不必要的,但只是一些我想展示的東西,因為python非常酷。在正如您在split語句中發現的那樣,您可以一次性將返回從列表或元組分解為多個變數。您可以使用此選項使for迴圈的工作更輕鬆:for student_name, score in students.items():
# or event
for student_name, (score1, score2, score3) in students.items():
print(student_name, score1, score2, score3)
#: brian 94.0 89.0 92.0
在乙個語句中進行多次比較是一件事。。。對你來說很有用。在# for example:
5 < 10 > 7 # will return true
# so use this like:
if score2 < score1 > score3:
# score 1 is the highest
輸出最高分數的學生姓名
描述 輸入學生的人數,然後再輸入每位學生的分數和姓名,求獲得最高分數的學生的姓名。輸入第一行輸入乙個正整數n n 100 表示學生人數。接著輸入n行,每行格式如下 分數 姓名 分數是乙個非負整數,且小於等於100 姓名為乙個連續的字串,中間沒有空格,長度不超過20。資料保證最高分只有一位同學。輸出 ...
1147 最高分數的學生姓名
輸入學生的人數,然後再輸入每位學生的分數和姓名,求獲得最高分數的學生的姓名。第一行輸入乙個正整數n n 100 表示學生人數。接著輸入n行,每行格式如下 分數 姓名 分數是乙個非負整數,且小於等於100 姓名為乙個連續的字串,中間沒有空格,長度不超過20。資料保證最高分只有一位同學。獲得最高分數同學...
題目 最高分數的學生姓名
輸入學生的人數,然後再輸入每位學生的分數和姓名,求獲得最高分數的學生的姓名。第一行輸入乙個正整數n n 100 表示學生人數。接著輸入n行,每行格式 分數 姓名 分數是乙個非負整數,且小於等於100 姓名為乙個連續的字串,中間沒有空格,長度不超過20。資料保證最高分只有一位同學。獲得最高分數同學的姓...