在Python中,有没有办法测试一个数字是否可被多个数字整除,而没有为每个因子写出模数运算?
更具体地说,是否有更好的方法来编写此代码而不是键入i%n == 0九十次?
if i % 11 == 0 and i % 12 == 0 and i % 13 == 0 ... and i % 100 == 0:
print(i)
谢谢!
答案 0 :(得分:8)
使用all()
和生成器表达式:
if all(i % n == 0 for n in range(11, 101)):
print(i)
答案 1 :(得分:4)
if all(i % n == 0 for n in reversed(xrange(11, 101))):
print(i)
仅提供了重复答案的略微修改版本:xrange
返回一个对象,该对象根据需要生成数字(略快于range
并且内存效率更高)。如果性能在这里很重要,这通常是像这样的数学代码片段,反向迭代器将首先检查更大的数字。这更有可能让您早日退出all()
功能。
答案 2 :(得分:3)
你可以这样做:
if all(i % n == 0 for n in range(11, 101)):
print(i)
答案 3 :(得分:3)
(注意:这具有数学意义,但以前的答案在实践中更好。)
您可以计算所有除数的最小公倍数,并查看该数字是否可被整除。 (只是拿产品不起作用;考虑N = 16,除数为4和8。)
答案 4 :(得分:0)
以上答案是:
if all(i % n == 0 for n in range(11, 101)):
print(i)
,应该提到澄清,只适用于内置的所有功能。我使用Spyder,它默认使用来自numpy.core.fromnumeric的all,上面的答案在这种情况下不起作用。然后使用以下内容:
import __builtin__
if __builtin__.all(i % n == 0 for n in range(11, 101)):
print(i)