2015-06-16 50 views
-1
def first_even(items): 
    """ (list of int) -> int 

    Return the first even number from items. Return -1 if items contains no even numbers. 

    >>> first_even([5, 8, 3, 2]) 
    8 
    >>> first_even([7, 1]) 
    -1 
    """ 
    counter = 0 
    for item in items: 
     counter = counter + 1 
     if item % 2 == 0: 
      return item 
     elif counter == len(items): 
      return -1 

詳細詳細詳細詳細詳細當空列表作爲參數傳遞時,如何避免返回None類型?

+3

「詳情詳情詳情詳情詳情」?您是否期待「Code Code Answer Explanation Code」的答案? – TigerhawkT3

回答

1

您也可以在這種情況下返回-1

counter = 0 
for item in items: 
    counter = counter + 1 
    if item % 2 == 0: 
     return item 
    elif counter == len(items): 
     return -1 
return -1 

items是空的for循環根本不會回來,它會直接進入最後一行是return -1

+0

啊,好的,非常感謝你!這是因爲空列表與任何if語句不一致嗎? –

+0

不,當'items'爲空時,項目中的項目':'無關。所以整個for循環會被跳過,它會運行最後一行。 –

0

我會建議一種不同的方法:發現沒有偶數整數時發生異常。這裏有一個實現:

def first_even(items): 
    """Returns the first even integer in an iterable producing ints. 

    Raises 
    ------ 
    ValueError 
     If the iterable contains no even integers, or is in fact 
     empty. 
    """ 
    for item in items: 
     if item % 2 == 0: 
      return item 
    else: 
     raise ValueError('The list contains no even items.') 

爲什麼引發異常?如果您使用返回值-1來指示錯誤,則在某些情況下使用您的函數會變得棘手。例如,假設我要檢查,如果在列表中的第偶數爲負:

if first_even([3, -4, 5, 8]) < 0: 
    print('The first even integer is negative!') 

這將爲投入工作,但什麼:

if first_even([1, 3, 5]) < 0: 
    print('The first even integer is negative!') 

這將打印反正!

+0

是的,我通常會在出現錯誤的情況下發送打印消息,但爲了進行作業,我需要返回-1哈哈。謝謝你!我很欣賞你提出這個建議的時間。 –

相關問題