2014-07-08 155 views
0

我有這段代碼的問題:在return語句循環

List=[' ', 'X', 'X', 'X']+[' ']*6 
le='X' 
def Return(): 
    return((for i in range(1, 10, 3): 
     (List[i]==le and List[i+1]==le and List[i+2]==le))) 

我想它一個for循環,而不必指定這樣寫:

def Return(): 
    return ((List[1]==le and List[2]==le and List[3]==le) or #True 
     (List[4]==le and List[5]==le)...etc.) 

當我使用foor-loop時,我只是收到一條消息,提示「語法無效」,但我不明白爲什麼。

回答

1

這是因爲for在Python是不是表達式,它沒有價值,你可以return

+0

哦,好吧!感謝您解釋這一點。有沒有其他方式可以簡化後面的代碼呢?打印每一個數字,如果它是一個更長的列表,感覺有點乏味 – pineappleexpress

1

你可以嘗試使用any

lis=[' ', 'X', 'X', 'X']+[' ']*6 
le='X' 
def func(): 
    return any(all(lis[j]==le for j in range(i,i+3)) for i in range(0,len(lis),3) 

注意:不要使用Python的關鍵字,方法名和變量

+0

好的,我會牢記這一點!我沒有看到你的代碼一次只能得到三個數字,但如果只有任何數字== le,它會返回true。但也許這是我的誰是愚蠢的:P – pineappleexpress

1

你可以使用所謂"List comprehensions"

def Return(): 
    return any([List[i]==le and List[i+1]==le and List[i+2]==le for i in range(1, 10, 3)]) 
+0

謝謝,這看起來不錯!我只是有一個問題是,當我要檢查,如果返回()函數返回「True」(?這應該右),我想打字:如果返回==真:打印(「真」)。但該程序不打印任何東西。 – pineappleexpress

+2

它應該是任何。因爲OP試圖爲或條件 –

+0

@ user3815466:您需要試圖'如果返回()==真:打印(「真」)'。注意'print'和括號實際調用返回的情況。否則,你正在比較一個函數與真值... – Praveen