2015-02-11 75 views
1

所以我想要的是一個函數,它從用戶處獲取元組輸入,然後計算出該元組是否包含偶數。我想知道如何用for或while循環來做到這一點。我試過了,但代碼不起作用。我種了什麼,但它不工作:Python:查找元組是否包含偶數的函數?

def ifEven(x): 
    i = -1 
    if isinstance(x, tuple): 
     while i < len(x): 
      for i in x: 
       i = i + 1 
       if x[i] % 2 == 0: 
        return True 
       else: 
        return False 
+0

是否有一個特定的原因,你想要使用'for'或'while'循環? Python的效率來源於它的生成器和列表理解 – ashwinjv 2015-02-11 00:43:38

+0

通常只會將代碼限制爲只有一種類型的參數,這對於參數是一個元組是非常重要的嗎? Ducktyping和普遍性是Python的特徵之一。 – 2015-02-11 01:35:37

回答

5

你應該閱讀文檔中關於for聲明在Python:https://docs.python.org/2/tutorial/controlflow.html#for-statements

這裏是一個工作代碼:使用Python的生成器表達式

def ifEven(x): 
    if isinstance(x, tuple): 
     for i in x: 
      if i % 2 == 0: 
       return True 
    return False 

話雖這麼說,它可以被改寫爲一個班輪:

def isEven(x): 
    return any(v % 2 == 0 for v in x) 
+0

不要打擾。只需使用'any()'。 – Kevin 2015-02-11 00:38:05

+0

@Kevin,OP要求一個'for'循環,而不是'any'。 – merlin2011 2015-02-11 00:39:49

+0

@ merlin2011:在我的書中,生成器表達式仍然是'for'循環。 – Kevin 2015-02-11 00:40:25

0

您縮進看起來有點過,但該可能就是你複製/粘貼的方式。在Python中,True是「真」,而不是「真」,因爲你的返回函數可能會讓你感到困惑。

0

for循環i本身初始化並開始對元組進行迭代。 i在每次迭代的內容是元組中的元素之一。 讓我們深入瞭解它。讓你的元組是(3, 4, 6, 7) 在第一次迭代: -

for i in x  # i=3 
    i = i+1 # i = 4 
    if x[i] %2 == 0 : # x[4] % 2 == 0 => This will give you IndexError, since there is no index 4 in the tuple x(python uses zero based indexing) 

所以你不需要單獨增加ifor遞增高達提供的序列末尾的迭代變量(在你的情況下,它高達最後一個元素在元組x

而且由於i擁有元組本身的元素,所以通過增加它你將增加i中的值。然後,您使用元組中的索引遞增訪問元素。也就是說,如果元組元素爲3,則首先將其遞增1,然後變爲4,然後檢查元組的第4個索引中的元素是否爲偶數,即x[4]是否爲偶數。但是,因爲我已經考慮了元組,是lengthe 4,所以它會拋出IndexError

所以,在這裏你不需要初始化i = -1,不需要使用while,無需增加ifor循環。 Rest解決方案由Selcuk提供。

相關問題