讓我們集中於什麼問:
爲什麼把最大的沒有。在列表中的第一個位置是給出索引超出界限的錯誤,否則它運行完美?
的答案很簡單:
該指數i
,j
是在啓動0
和1
。如果列表中的第一個項目最大,則列表j
中的每個項目都增加1,導致列表中最後一個項目的索引超出界限。
如果最大的項目是不是第一個j
將增加一個最大n-1
倍,其中n
是列表k
的長度,因此,指數走出束縛的錯誤不能「成就」。
這裏不改變使用這樣的功能,而不是max(k)
搜索最大的病「邏輯」修復:
def gr(k):
i=0
j=1
for x in k:
if j > len(k)-1:
x=k[i]
break
if k[i]>k[j]:
x=k[i]
j+=1
else:
x=k[j]
i+=1
print (x)
順便說一句:在stackexchange他們爲有這樣的一種樂趣人民創造問題https://codegolf.stackexchange.com。
我們處於stackoverflow ...
這裏完整起見:
此功能不能總是找到一個列表
最大值什麼挑戰好奇地發現它返回的情況下,錯誤的價值:)
(如果您喜歡,您可以在下面的評論中爲此挑戰提供「解決方案」)
我下面的評論的請求表明,當以上功能並沒有提供正確的結果:
gr([1, 2, 3, 4, 5])
gr([4, 1, 7, 3, 9])
給出:
4
7
它應該給5 9代替。
增編答:在評論帖子的啓發我已經有點進一步提高最後在提供了改進的功能的版本的意見,所以它現在可以正確地覆蓋了所有可能的情況:
def ki(k):
i=0
j=1
y=k[j-1]
for x in k:
if i > i + j:
y=k[i]
break
if k[j] > y:
y=k[j]
i+=2
else:
x=k[j-1]
i+=3
i-=1
j+=1
if j > len(k)-1:
break
if x < x - j:
print(x)
else:
print(y)
不要採取上述嚴重,但不要笑!沒有幽默在stackoverflow!
附錄B:現在的解決方案,該解決方案......所有上面的代碼,如果你只是扔掉所有這一切都沒有必要,在那裏爲製造混亂唯一的緣故語句和變量可表示如下:
def ki(k):
y=k[0]
for x in k[1:]:
if x > y: y=x
print(y)
知道了這一點,你認識的實際挑戰:編寫的代碼,不會完全一樣的小片以上,但是汗牛充棟,因爲混亂和難以遵循它實際做盡可能...
您正在更改循環中間的循環變量'x'的值,這絕不是一個好主意。也給有意義的變量名稱,以便你的意圖變得更清晰。 –
重新創建'max()'? –
NOPE!只是弄清楚它是如何工作的。 –