我正在尝试根据一组逻辑条件创建一个目录,但它只能通过第二个逻辑语句正确执行。
# Sample code:
test_dict = {}
file_0 = "C:/Year/yea_84.txt"
file_1 = "C:/Year/yea_92.txt"
file_2 = "C:/Year/yea_01.txt"
file_3 = "C:/Year/yea_06.txt"
for x in range(1985, 2008):
if (x <= 1991):
test_dict[x] = file_0
elif (x > 1991 & x <= 2000):
test_dict[x] = file_1
elif (x > 2000 & x <= 2005):
test_dict[x] = file_2
elif (x > 2005):
test_dict[x] = file_3
print test_dict
# Print result
1985 C:/Year/yea_84.txt
1986 C:/Year/yea_84.txt
1987 C:/Year/yea_84.txt
1988 C:/Year/yea_84.txt
1989 C:/Year/yea_84.txt
1990 C:/Year/yea_84.txt
1991 C:/Year/yea_84.txt
1992 C:/Year/yea_92.txt
1993 C:/Year/yea_92.txt
1994 C:/Year/yea_92.txt
1995 C:/Year/yea_92.txt
1996 C:/Year/yea_92.txt
1997 C:/Year/yea_92.txt
1998 C:/Year/yea_92.txt
1999 C:/Year/yea_92.txt
2000 C:/Year/yea_92.txt
2001 C:/Year/yea_92.txt
2002 C:/Year/yea_92.txt
2003 C:/Year/yea_92.txt
2004 C:/Year/yea_92.txt
2005 C:/Year/yea_92.txt
2006 C:/Year/yea_92.txt
2007 C:/Year/yea_92.txt
我怀疑这是因为每个循环字典都会改变顺序,但这似乎是一个糟糕的解释。有人可以扩展这种行为吗?
答案 0 :(得分:3)
您使用错误的运算符进行布尔测试。 &
是binary bitwise operator,而不是boolean logic operator。因为它有一个different operator precedence,你真的在计算别的东西:
x > 1991 & x <= 2000
被解释为
x > (1991 & x) <= 2000
你的16年中都是如此,包括2001年到2007年。
改为使用and
:
x > 1991 and x <= 2000
或使用比较链:
1991 < x <= 2000
放在一起,将最后一次测试简化为else
:
for x in range(1985, 2008):
if x <= 1991:
test_dict[x] = file_0
elif 1991 < x <= 2000:
test_dict[x] = file_1
elif 2000 < x <= 2005:
test_dict[x] = file_2
else:
test_dict[x] = file_3