2017-06-17 63 views
0

當我運行這個程序時,它說最大數量比它實際在列表中低1個數字。例如,我運行下面的代碼,它告訴我,當它從列表中是92時,最大數字是91。爲什麼我的程序輸出錯誤的最高號碼?

examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]] 

for eachRow in range(len(examMarks)): 
    for eachColumn in range(len(examMarks[eachRow])): 
     eachExamMark = (examMarks[eachRow][eachColumn]) 


max = -100 
for everyMark in range(eachExamMark): 
    if everyMark > max: 
     max = everyMark 
print(max) 
+1

你有沒有調試它,看看在什麼點數據的變化? – Carcigenicate

+2

這段代碼不會做你認爲它的作用。完全一樣。我建議你做一些[橡皮鴨調試](https://en.wikipedia.org/wiki/Rubber_duck_debugging)來弄清楚這個程序發生了什麼。 –

+0

提示,在'max = -100'上面加'print(eachExamMark)'。代碼似乎沒有做你認爲它做的事情。 – Carcigenicate

回答

2

您應該試試這段代碼!

examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 12]] 
eachExamMark =[] 
for eachRow in range(len(examMarks)): 
    for eachColumn in range(len(examMarks[eachRow])): 
     eachExamMark.append(examMarks[eachRow][eachColumn]) 


max = -100 
for everyMark in eachExamMark: 
    if everyMark > max: 
     max = everyMark 
print(max) 
1

eachExamMark將被設置爲(92)這是因爲你的程序的第一部分的最後一步的數量92。如果你通過range(92)進行循環,它將在91處結束。

你至少應該做到:

print(eachExamMark) 

max = -100前行。

你可能想要做的:

eachExamMark.append(examMarks[eachRow][eachColumn]) 

開頭定義eachExamMark = []後。

我不知道,如果你要解決的事情這樣,但恕我直言,你不應該使用range()在所有,而且也沒有必要來完成構建扁平列表。

你可以例如做:

examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]] 
print(max(max(x) for x in examMarks)) 
3

我沒有看到3循環的誠實原因,你有沒有嘗試過這樣的事情?

examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]] 
highest = 0 


for marks in examMarks: 
    for mark in marks: 
     highest = max(mark, highest) 

print('Highest mark: %d' % highest) 
+0

雖然這是一個更好的方法來找到最大的正確答案,但這並不能幫助OP理解爲什麼他會得到91作爲回答 – Anthon

0

正如其他人指出的問題是最後一個循環是執行一個數字的範圍,而不是你所期望的列表。

另一種算法:

from itertools import chain 
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]] 
print(max(chain.from_iterable(examMarks))) 

chain.from_iterable(examMarks)平展列表的迭代器

max()發現名單上的最大數量

注:我原來的答覆用於​​扁平化列表。感謝@John Coleman對更快解決方案的評論。

+0

這很聰明,但看到這個:https:// mathieularose.com/how-not-to-flatten-a-list-of-lists-in-python/ –

0

試試這個:

examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 12]] 
eachExamMark =[] 
for eachRow in examMarks: 
    eachExamMark.append(max(eachRow)) 

print max(eachExamMark) 
相關問題