我有一个包含数字的列表(lijstkleur)1,4,6,7。 我的范围从0到8。 现在我有以下代码:
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语句有什么问题
答案 0 :(得分: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)
答案 1 :(得分:1)
您的条件不是评估您的想法。它正在这样做:
if (x in lijstkleur) and (lijstkleur==True):
lijstkleur==True
的结果总是False
,因为列表永远不会等于布尔值,所以条件总是返回False
。你想要的是这个:
if x in lijstkleur: