如何检查一个数字是否可被另一个数字整除(Python)?


112

我需要测试从1到1000的每个数字是3的倍数还是5的倍数。我认为我要这样做的方式是将数字除以3,如果结果是整数,则它将是3的倍数。与5相同。

如何测试数字是否为整数?

这是我当前的代码:

n = 0
s = 0

while (n < 1001):
    x = n/3
    if isinstance(x, (int, long)):
        print 'Multiple of 3!'
        s = s + n
    if False:
        y = n/5
        if isinstance(y, (int, long)):
            s = s + n

    print 'Number: '
    print n
    print 'Sum:'
    print s
    n = n + 1

2
在Python 2.x中,整数除法总是产生整数。
罗素·博罗戈夫

14
您应该打印“嘶嘶声”和“嗡嗡声”
2011年

9
欧拉计划问题1?
Ashutosh Dave

Answers:


228

您可以使用模运算符执行此操作, %

n % k == 0

当且仅当n是的精确倍数时,计算结果为true k。在小学数学中,这被称为除法运算的余数。

在您当前的方法中,您执行除法,结果将是

  • 如果使用整数除法,则始终为整数,或者
  • 如果使用浮点除法,则始终为浮点数。

测试除数只是错误的方法。


0%5 == 0也将为True,但零不是零的精确倍数。
Fusion

@融合0 == 0*5
David Heffernan

@Chris_Rands回答一下,做代码高尔夫的人(像我一样)会很高兴。实际上,我是来这里寻找这样的高尔夫答案的。
MilkyWay90


1

我有同样的方法。因为我不明白如何使用module(%)运算符。

6%3 = 0 *这意味着如果将6除以3,将没有余数,而3是6的因数。

现在,您必须将其与给定的问题相关联。

如果n%3 == 0 *这是说,如果我的数字(n)被3整除,剩下0。

添加您的then(print,return)语句,然后继续


0

您可以使用%运算符检查给定数字的可区分性

该代码检查是否给出否。不可以被3或5整除。小于1000如下:

n=0
while n<1000:
    if n%3==0 or n%5==0:
        print n,'is multiple of 3 or 5'
    n=n+1

0

该代码似乎可以满足您的要求。

for value in range(1,1000):
    if value % 3 == 0 or value % 5 == 0:
        print(value)

或类似的东西

for value in range(1,1000):
    if value % 3 == 0 or value % 5 == 0:
        some_list.append(value)

或任何数量的东西。


回答您的问题:选择和ctrl + K缩进。这次我已经为您完成了。
让·弗朗索瓦·法布尔

-1
a = 1400
a1 = 5
a2 = 3

b= str(a/a1)
b1 = str(a/a2)
c =b[(len(b)-2):len(b)]
c1 =b[(len(b1)-2):len(b1)]
if c == ".0":
    print("yeah for 5!")
if c1 == ".0":
    print("yeah for 3!")

1
最好解释一下您所提供的修复程序以及它是如何工作的
chans 19-10-18

1
这不是测试可除性的好方法:进行浮点除法,转换为字符串,然后进行字符串操作以找出小数部分是否(字面意义上)为“ .0”,至少效率最低,并且可能会出错,具体取决于浮点实现和执行转换的代码。
NickD

例如,尝试x=10000000000000000; b = str(x/(x-1)); b使用python解释器。
NickD

-2

对于小数字n%3 == 0将是好的。对于非常大的数字,我建议先计算交叉和,然后检查交叉和是否为3的倍数:

def is_divisible_by_3(number):
    if sum(map(int, str(number))) % 3 != 0:
        my_bool = False
    return my_bool

2
与使用模运算相比,计算叉和和使用模运算真的快吗?如果是这样,您是否应该在数字足够小之前递归调用函数?
2014年

-6

试试这个 ...

public class Solution {

  public static void main(String[] args) {
    long t = 1000;
    long sum = 0;

    for(int i = 1; i<t; i++){
            if(i%3 == 0 || i%5 == 0){
                sum = sum + i;
            }
        }
        System.out.println(sum);    
  }
}

我怀疑Java是Python,所以这不是一个正确的答案
MilkyWay90 '18

您的答案与该问题无关
Varadaraju G

-6

jinja2模板fizzbuz:

<form>
  <ol>
    {% for x in range(1,n+1) %}
      {% set fizzbuzz_rpm = x %}
      {% if x % 3 == 0 and x % 5 == 0 %}
        {% set fizzbuzz_rpm="FizzBuzz" %}
      {% elif x % 3 == 0 %}
          {% set fizzbuzz_rpm="Fizz" %}
      {% elif x %5 == 0 %}
          {% set fizzbuzz_rpm="Buzz" %}
      {% endif %}
      <li>{{fizzbuzz_rpm}}</li>
    {% endfor %}
  </ol>
</form>

5
要求使用Python解决方案。
jmd_dk

1
您的答案与该问题无关
Varadaraju G

-7

最简单的方法是测试数字是否为is int(x) == x。否则,大卫·赫弗南说了什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.