Bagaimana Anda memeriksa apakah suatu nomor habis dibagi oleh nomor lain (Python)?

112

Saya perlu menguji apakah setiap angka dari 1 hingga 1000 adalah kelipatan 3 atau kelipatan 5. Cara yang saya pikir akan saya lakukan ini adalah dengan membagi angka dengan 3, dan jika hasilnya adalah bilangan bulat maka itu akan terjadi. menjadi kelipatan 3. Sama dengan 5.

Bagaimana cara menguji apakah nomor tersebut adalah bilangan bulat?

ini kode saya saat ini:

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
Taimur
sumber
2
Dalam Python 2.x, pembagian integer selalu menghasilkan integer.
Russell Borogove
14
Anda harus mencetak "Fizz" dan "Buzz"
wim
9
Proyek Euler Masalah 1?
Ashutosh Dave

Jawaban:

228

Anda melakukan ini menggunakan operator modulus, %

n % k == 0

mengevaluasi benar jika dan hanya jika nmerupakan kelipatan tepat dari k. Dalam matematika dasar, ini dikenal sebagai sisa dari sebuah pembagian.

Dalam pendekatan Anda saat ini, Anda melakukan pembagian dan hasilnya akan baik

  • selalu berupa integer jika Anda menggunakan pembagian integer, atau
  • selalu float jika Anda menggunakan pembagian floating point.

Itu hanya cara yang salah untuk menguji keterpisahan.

David Heffernan
sumber
0% 5 == 0 akan menjadi True juga, tetapi nol bukanlah kelipatan tepat dari nol.
Fusion
@Fusion0 == 0*5
David
@Chris_Rands Jawabannya adalah, orang yang melakukan code-golf (seperti saya) akan sangat senang. Sebenarnya, saya datang ke sini mencari jawaban golf seperti itu.
MilkyWay90
5

Anda cukup menggunakan %operator Modulus untuk memeriksa pembagian.
Sebagai contoh: n % 2 == 0berarti n habis habis dibagi 2 dan n % 2 != 0berarti n tidak habis habis dibagi 2.

Pankaj Prakash
sumber
1

Saya memiliki pendekatan yang sama. Karena saya tidak mengerti cara menggunakan operator module (%).

6% 3 = 0 * Ini berarti jika Anda membagi 6 dengan 3 Anda tidak akan memiliki sisa, 3 adalah faktor dari 6.

Sekarang Anda harus menghubungkannya dengan masalah Anda.

if n% 3 == 0 * Ini mengatakan, jika bilangan saya (n) habis dibagi 3 meninggalkan sisa 0.

Tambahkan pernyataan kemudian (cetak, kembalikan) dan lanjutkan

brandon gossman
sumber
0

Anda dapat menggunakan % operator untuk memeriksa pembagian nomor tertentu

Kode untuk mengecek apakah diberikan no. habis dibagi 3 atau 5 jika tidak. kurang dari 1000 diberikan di bawah ini:

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

Kode ini tampaknya melakukan apa yang Anda minta.

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

Atau semacamnya

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

Atau beberapa hal.

Bennett Jester
sumber
untuk menjawab pertanyaan Anda: pilih dan ctrl + K indentasi. Saya telah melakukan itu untuk Anda kali ini.
Jean-François Fabre
-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!")
james faber
sumber
1
Lebih baik menjelaskan perbaikan yang telah Anda berikan dan apa yang membuatnya berhasil
chans
1
Itu BUKAN cara yang baik untuk menguji dapat dibagi: melakukan pembagian float, mengonversi menjadi string dan kemudian melakukan manipulasi string untuk menemukan apakah bagian pecahan (secara harfiah) ".0" paling tidak tidak efisien, dan mungkin salah tergantung pada implementasi floating point dan kode yang melakukan konversi.
NickD
Misal coba x=10000000000000000; b = str(x/(x-1)); bdi interpreter python.
NickD
-2

Untuk jumlah kecil n%3 == 0akan baik-baik saja. Untuk bilangan yang sangat besar saya mengusulkan untuk menghitung jumlah silang terlebih dahulu dan kemudian memeriksa apakah jumlah silang tersebut adalah kelipatan 3:

def is_divisible_by_3(number):
    if sum(map(int, str(number))) % 3 != 0:
        my_bool = False
    return my_bool
nurlan.turganaliev
sumber
2
Apakah menghitung jumlah silang dan menggunakan operasi modulus benar-benar lebih cepat daripada langsung menggunakan operasi modulus? Jika demikian, bukankah sebaiknya Anda memanggil fungsi Anda secara rekursif sampai jumlahnya cukup "kecil"?
membunyikan klakson
-6

Coba ini ...

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);    
  }
}
Asanka Dhananjaya
sumber
Saya ragu Java adalah Python, jadi ini bukan jawaban yang valid
MilkyWay90
Jawaban Anda tidak relevan dengan pertanyaan
Varadaraju G
-6

jinja2 template 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>
Richard Morgan
sumber
5
Solusi dengan Python diminta.
jmd_dk
1
Jawaban Anda tidak relevan dengan pertanyaan
Varadaraju G
-8

Cara paling sederhana adalah dengan menguji apakah suatu bilangan adalah bilangan bulat int(x) == x. Sebaliknya, apa yang dikatakan David Heffernan.

cschorn
sumber