在我改进代码之前,我正试图强行执行一个项目问题。我不能让多个条件和逻辑运算符在我的循环中工作。这是代码,编辑器显示没有错误,但它只是不增加条件值,所以显然有些条件是错误的。有人能告诉我使用多个逻辑运算符的正确方法吗?
i = 20
while (i % 2 != 0 and i % 3 != 0 and i % 4 != 0 and i % 5 != 0 and
i % 6 != 0 and i % 7 != 0 and i % 8 != 0 and i % 9 != 0 and
i % 10 != 0 and i % 11 != 0 and i % 12 != 0 and i % 13 != 0 and
i % 14 != 0 and i % 15 != 0 and i % 16 != 0 and i % 17 != 0 and
i % 18 != 0 and i % 19 != 0 and i % 20 != 0):
i = i + 20
else:
print(i)
答案 0 :(得分:1)
看起来你正试图找到最小的数字,它是从1到20(包括1和20)的所有整数的倍数。你从20开始,你想继续上升20,直到你的状况得到满足。
在较小的情况下更容易看到问题。假设我们只关心2,3和4。
我们希望找到一个的数字
i % 2 == 0 and i % 3 == 0 and i % 4 == 0
但是对此的否定是
not (i % 2 == 0 and i % 3 == 0 and i % 4 == 0)
或分发not
,
i % 2 != 0 or i % 3 != 0 or i % 4 != 0
换句话说,如果任何的数字未能均匀划分,您希望增加20,而不是所有的数字都不能。
例如, 20可被2整除,因此i % 2 != 0
为False,因此您有False and i % 3 != 0 and.. etc
,这仍然是假的。代码的工作版本看起来像
i = 20
while any(i % num != 0 for num in range(2,21)):
i += 20
我使用了生成器表达式以避免所有重复。注意认为这比使用他们想要你使用的数学技巧慢 ,因为最终答案有9位数。