2013-04-03 77 views
1

我有一個包含數字(lijstkleur)1,4,6,7的列表。 我也有從0至8 現在範圍我已經TE下面的代碼:如果語句與列表包含

for x in range(0, len(L), 1): 
    if x in lijstkleur == True: 
     self.label = Label(self.frame, text=string[x], fg="yellow", bg="red") 
     self.label.pack(side=LEFT) 
    else: 
     self.label = Label(self.frame, text=string[x], fg="white", bg="red") 
     self.label.pack(side=LEFT) 

,但所有的數字變成白色的,什麼是錯的這個if語句

回答

5

無需使用== True

if x in lijstkleur: 

表達x in lijstkleur==True被解釋爲(x in lijstkleur) and (lijstkleur == True);一個列表永遠不會等於布爾型True,因此您最終將測試something and False,而不是保證爲False。這被稱爲comparison chaining,使得像10 < a < 20這樣的表達成爲可能。

您可以簡化您的通話range()只是len(L)

for x in range(len(L)): 

,沒有必要重複.pack()電話:

if x in lijstkleur: 
    self.label=Label(self.frame,text=string[x],fg="yellow",bg="red") 
else: 
    self.label=Label(self.frame,text=string[x],fg="white",bg="red") 
self.label.pack(side=LEFT) 
+0

當'範圍內的x(len(L))'將不需要'for x in range(0,len(L),1)'。或者'對於x,zip(L,string)''。並且'self.label.pack(side = LEFT)'可以被掛起......這裏有很多。 – hughdbrown

+0

非常感謝答案;) – Glenn

1

你的條件不評價你認爲它的方式是。它這樣做:

if (x in lijstkleur) and (lijstkleur==True): 

lijstkleur==True結果總是False,因爲名單是永遠等於一個布爾值,因此有條件總是返回False。你想要的是:

if x in lijstkleur: 
+0

'lijstkleur == True'是'True' ..或'False' ..他們都不可迭代。你爲什麼不收到任何錯誤信息? –

+0

@KarolyHorvath哎呦;跳過一塊。固定。 –

+0

啊..我忘了操作員可以在兩邊。謝謝! –