数値が別の数値で割り切れるかどうかを確認するにはどうすればよいですか(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
あなたが「フィズ」と「バズ」を印刷しなければならない
WIM

9
プロジェクトオイラー問題1?
Ashutosh Dave 2013

回答:


225

これは、モジュラス演算子を使用して行います。 %

n % k == 0

nがの正確な倍数である場合にのみtrueと評価されますk。初等数学では、これは除算の剰余として知られています。

現在のアプローチでは、除算を実行し、結果は次のいずれかになります

  • 整数除算を使用する場合は常に整数、または
  • 浮動小数点除算を使用する場合は、常に浮動小数点です。

分割可能性をテストするのは、間違った方法です。


0%5 == 0もTrueになりますが、ゼロはゼロの正確な倍数ではありません。
Fusion

@Fusion0 == 0*5
デビッド

@Chris_Randsそれを答えに入れれば、コードゴルフをする人(私のように)はとても幸せでしょう。実際、私はそのようなゴルフの答えを探してここに来ました。
MilkyWay90 2018

5

単純に%Modulus演算子を使用して、分割可能性を確認できます。
例:n % 2 == 0nは2で完全に割り切れることをn % 2 != 0意味し、nは2で完全に割り切れないことを意味します。


1

私は同じアプローチをしました。module(%)演算子の使い方がわからなかったので。

6%3 = 0 *これは、6を3で除算した場合、余りがないことを意味し、3は6の因数です。

今、あなたはそれをあなたの与えられた問題に関連付ける必要があります。

if n%3 == 0 *これは、私のnumber(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
あなたが与えた修正とそれが機能した
理由

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
クロスサムの計算とモジュラス演算の使用は、モジュラス演算を直接使用するよりも本当に速いですか?もしそうなら、その数が十分に「小さくなる」まで関数を再帰的に呼び出すべきではありませんか?
クラクション

-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、

あなたの答えは質問には関係ありません
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 2017年

1
あなたの答えは質問とは関係ありません
バラダラジュG

-7

最も簡単な方法は、数値が整数であるかどうかをテストすることですint(x) == x。そうでなければ、デビッド・ヘファーナンが言ったこと。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.