求最小公倍数
s = input().split()x,y,z =int(s),int(s),int(s)
n = 1
while True:
if n % x == 0 and n % y == 0 and n % z == 0:
print(n)
break
n = n+ 1
以上是正确代码,我想改写一下
然后我改为以下错误代码
s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while n % x != 0 and n % y != 0 and n % z != 0:
n += 1
print(n)
然后我又改为以下对的代码
s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while not (n % x == 0 and n % y == 0 and n % z == 0):
n += 1
print(n)
我的理解是
while n % x != 0 and n % y != 0 and n % z != 0:
while not (n % x == 0 and n % y == 0 and n % z == 0):
是相同的,懵了 s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while not(n % x == 0 and n % y == 0 and n % z == 0):
n = n+ 1
print(n)
把条件写明可能会对明白问题更有帮助。
n % x != 0 and n % y != 0 and n % z != 0 表达的是 n 既不是 x 的倍数,也不是 y 的倍数,还不是 z 的倍数。如果 n 是其中任何一个的倍数,该表达式就会求值为假,但此时的 n 并不一定是三者的公倍数。
相反, not (n % x == 0 and n % y == 0 and n % z == 0) 表示 n 不满足 n 是 x 的倍数,也是 y 的倍数,还是 z 的倍数,则当此表达式求值为假时 n 必然既是 x 的倍数,也是 y 的倍数,还是 z 的倍数,即三者的公倍数。
这是比较基础的逻辑运算问题,您可能会愿意了解一下德·摩根律,它会告诉您如何正确移除此类表达式外部的 not () 。
页:
[1]