我在while循环中遇到if语句的问题,每次都在同一个地方崩溃:如果c!= i& c!= a& c!= b:。当我评论这个陈述时,它有效。有谁知道为什么? 这是代码片段:
while COUNT < GENERATIONS:
for i in range(0,NP):
while True:
a = randint(0,NP-1)
if a != i:
break
while True:
b = randint(0,NP-1)
if b != i & b != a:
break
while True:
c = randint(0,NP-1)
if c != i & c != a & c != b:
break
答案 0 :(得分:1)
您使用了错误的运算符,因此您得到了一个非常不同的表达式。
感谢operator precedence而不是测试(c != i) & (c != a) & (c != b)
,您实际测试表达式c != (i & c) != (a & c) != b
,其中&
执行按位对i
和c
以及a
和c
个操作数的操作。
您想使用逻辑 and
运算符,该运算符的优先级低于比较值:
while True:
a = randint(0,NP-1)
if a != i:
break
while True:
b = randint(0,NP-1)
if b != i and b != a:
break
while True:
c = randint(0,NP-1)
if c != i and c != a and c != b:
break
请注意,如果您想选择3个唯一的随机数,可以将random.sample()
与xrange()
对象({3}}用于Python 3)一起使用:
range()
答案 1 :(得分:0)
您使用的是按位NSString *serverIP = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CompanyNameDevServerIP"];
运算符,而不是布尔&
关键字。将and
更改为&
,您的代码实际上会进行布尔比较。