2017-04-20 41 views
0

不明白什麼是錯的,它返回它在valormax彈出最大值變量康塔多..無法看到錯誤代碼

def ArrayAdditionI(arr): 
    valormax=arr.pop(arr.index(max(arr))) 
    contador=0 
    i=0 
    arr1=sorted(arr) 
    while contador<valormax: 
     contador+=arr1[i] 
     i+1 
     if i>len(arr1): 
      break 

    if contador==valormax: 
     return "true" 
    else: 
     return "false" 

順便問一下有沒有人現在如何申請在PowerShell中的調試器,以查看循環如何進行,避免通過這裏問這些類型的問題?

+2

有縮進問題 – Surajano

+0

使用pdb甚至更好 - pudb進行調試。 –

+1

i + 1應該可能是i + = 1,爲什麼不使用以「布爾True」和「False」構建的pythons而不是字符串?從長遠來看,這將節省您的時間。 – Mike

回答

2

嗯,首先,

if contador==valormax: 
return "true" 
else: 
return "false" 

應該

if contador==valormax: 
    return "true" 
else: 
    return "false" 

其次,爲了避免與指數擺弄像i(和寫作i+1代替i+=1),我將取代

i=0 
arr1=sorted(arr) 
while contador<valormax: 
    contador+=arr1[i] 
    i+1 
    if i>len(arr1): 
     break 

通過

for a in sorted(arr): 
    contador+=a 
    if contatdor >= valormax: 
     break 

順便說一句,這是什麼功能呢?計算max(arr)是否等於arr所有其他元素的總和?

+0

Lærne這是正確的 – ge00rge

+0

那麼,你知道有一個'sum'函數,對吧?所以你可以寫'return sum(arr)== 2 * max(arr)',因爲'sum(arr)'是'max(arr)'加上其他元素的總和。 –

0

您需要更改代碼可能是您的代碼格式的問題。

來源:

if contador==valormax: 
return "true" 
else: 
return "false" 

到:

if contador==valormax: 
    return "true" 
else: 
    return "false"