2016-09-27 35 views
1

我在教自己的python,但在這個問題上真的陷入了困境。它要求「編寫一個函數,接受一個奇數列表作爲輸入,循環使用奇數列表並將每個數字轉換爲偶數,將每個偶數存儲在新列表中並返回新列表。」只允許一個函數中的奇數循環

我對問題的後半部分感到滿意​​,但只是讓輸入成爲奇數而掙扎。

以下是我迄今爲止撰寫的內容,適用於您提交的任何奇怪列表,例如([1,3,5]),它起作用的時候是偶數,例如([2,3,5]),但當偶數位於列表的中間時,我無法工作,例如([1,2,3]) - 我想要它打印這個不能完成。

def odd_to_even(x): 
for i in x: 
    if i %2 == 0: 
     print('This is not an odd number') 
     break 
    else: 
     list = [] 
     for n in x: 
      list.append(n -1) 
     return list 
+7

你爲什麼需要處理這種情況?該規範說,你得到一個奇數的列表,所以你可以假設永遠是真實的,除非它被要求你拒絕否則。你也有一個奇怪的雙循環的事情正在進行(「我在X」和「X在X」)。 – jonrsharpe

+1

它的種類取決於你如何解釋單詞「接受」。這包括「拒絕」嗎? – deceze

回答

2

我會通過@jonrsharpe,@ShadowRanger和@deceze,你可能並不需要包括測試的意見達成一致,但它不會傷害。我會在這裏使用@ deceze的這一行。請記住,您必須在之外聲明您的清單使用它的循環,否則循環會在每次迭代中重置它。更好地改變名稱以使事情更清楚。

def odd_to_even(input_list): 
    if any(i % 2 == 0 for i in input_list): raise ValueError 
    output_list = [] 
    for i in input_list: 
     output_list.append(i - 1) 
    return output_list 

要合併@ deceze的良好的一行,並保持驗證:

def odd_to_even(input_list): 
    if any(i % 2 == 0 for i in input_list): raise ValueError 
    return [i - 1 for i in input_list] 

你問的評論是什麼奇怪的有關雙循環,所以我想補充一個小的解釋在這裏。有時候你想在一個循環中有一個循環,但是這不是那種情況。你有一個列表,並對其循環一次是在這種情況下,足以讓你:

  1. 確定列表中的所有數字是否是奇數(驗證列表)
  2. 每次取數,修改,並將其添加到您的輸出列表中

通過在第一次循環中循環第二次,您每次循環遍歷列表時都會循環遍歷列表。也許這種措詞令人困惑。假設您的輸入列表是[1, 3, 5]。通過在循環中使用循環,您最終會創建一個新的列表以輸出3次,因爲您會爲輸入中的每個項目創建一次輸出。我希望這有助於爲您清理它。

+2

這可能不是初學者友好的,但是......'return [i - 1 for i in x]'... – deceze

+2

或者如果你想接受奇數和偶數,並且確保它們即使在你返回的時候也是如此(即使是isn'錯誤,他們只是保持不變):'返回[i&〜1 for i in x]' – ShadowRanger