2016-07-30 44 views
-5

這裏的問題: 使用for循環,寫一個函數稱爲getMax4這需要在號碼列表。它決定和返回最大號碼是整除4. 該函數返回-999如果參數是一個空列表。列表和最大號

This is the sample output

我的代碼:

# What im trying to do is e.g. let's say: 
List=[1,2,3] 

maximum=List[0] 

for num in List: 
    if num > maximum: 
    maximum = num 
print(maximum) 
如果在參數列表中沒有數爲整除4. 下面顯示了示例輸出時調用該函數在Python殼函數返回0

通過執行for循環,它首先與列表[0]比較是1,列表中的「1」。在比較1和1之後,沒有差別,所以最大值仍然是1.現在它移動到第二次迭代maximum = List [0](在列表中爲1),現在與列表中的2進行比較。現在2比最大值更高,因此它將新的最大值更新爲2.(對不起,因爲英文不好) 所以問題是,當我嘗試使用空集來做它時,它會給我索引超出範圍。

的另一個問題是,當我輸入值的樣本輸出給定的,我得到的是0

List=[] 

def getMax4 (List): 
    highest=List[0] 
    for num in List: 
     if num % 4 == 0: 
      if num > highest: 
       highest = num 
      return highest 
     elif num == [] : 
      return -999 
     else: 
      return 0 
+2

您似乎忘記提問了。我們所有的就是你的任務和你的代碼。關於您使用該代碼做什麼,或者運行時會發生什麼。或者你希望我們爲此提供幫助。 –

+0

我使用翼。我如何附上照片? –

+0

您遇到的問題是因爲一旦找到可分割的數字,您立即返回'最高'。相反,用'0'初始化'highest',在for循環外面返回'highest',然後檢查'List'是空的(在for循環之外),而不是數字。 – L3viathan

回答

0

你的第一個問題是在highest = List[0]。由於List不保證至少有一個項目,因此如果List爲空,則會發生錯誤。您應該添加支票:

def getMax4(List): 
    if not List: # or if len(List) == 0: 
     return -999 
    ... 

另一個問題是您將highest定義爲第一項。爲什麼?第一項可能是最高的,如果它可以被四整除。您應將其設置爲0,以便即使沒有可被4整除的數字,它仍將具有示例中所需的默認值0

接下來的問題是你在循環內部返回。等到循環完成後再嘗試返回。

一旦我們修復所有這些問題,問題是-40好,即使它較低。我們可以簡單地添加支票not highesthighest等於0)。新代碼如下所示:

def getMax4(List): 
    if not List: 
     return -999 
    highest = 0 
    for num in List: 
     if num % 4 == 0 and (num > highest or not highest): 
      highest = num 
    return highest 
+0

感謝您的明確解釋!我現在已經完全理解,我應該使用len()函數檢查列表中有多少元素。幸運的是,我已經在我的課程中學到了邏輯運算符「和」,「或者」今天如果不是,我不會理解你說的。 –

+0

但我不明白什麼是不列表的意思。我想我不明白「不」的功能。 –

+0

假設你有'真實'。與此相反,「不是真」就是「假」。同樣,「不是假」是「真」。那麼,不僅僅是「真」和「假」有布爾相反。在某種程度上,空字符串相當於「False」。因此,'不是'「'是'真'。同樣,'not []'是'True',但'not [1]'或'not [3,6]'等等都是'False'。換句話說,「如果不是列表」是說'如果len(List)== 0'的奇特方式。請參閱http://stackoverflow.com/q/53513/5827958 – zondo

0

關於您的第二段代碼,您需要注意您放置退貨的位置。返回語句將使用該值退出函數。因此,這些檢查應該在循環之前和之後完成,因爲你的函數要求它遍歷整個列表。

我不太喜歡將您的初始值設置爲可能是有效輸出的東西。因此,這裏是我的代碼,我使用None的情況下沒有最大值。但是,由於預計爲0,因此需要在最後進行額外的檢查。

def getMax4(lst): 
    if not lst: 
     return -999 

    highest = None 
    for num in lst: 
     if num % 4 == 0 and (highest is None or num > highest): 
      highest = num 
    return 0 if highest is None else highest 


>>> getMax4([]) 
-999 
>>> getMax4([1, 3, 9]) 
0 
>>> getMax4([-4, 3, -12, -8, 13]) 
-4 
>>> getMax4([1, 16, 18, 12]) 
16 
>>> getMax4([-4, 0, -8]) 
0 

在最後一個例子0是最大值,如果爲0不應該算作然後是所必需的if語句的額外條件被4整除的有效最大值。