Bir sayının başka bir sayıya (Python) bölünebilir olup olmadığını nasıl kontrol edersiniz?


113

1'den 1000'e kadar her bir sayının 3'ün katı mı yoksa 5'in katı mı olduğunu test etmem gerekiyor. Bunu yapacağımı düşündüğüm yol, sayıyı 3'e bölmek olurdu ve sonuç bir tamsayı ise o zaman 3'ün katı olmalıdır. 5 ile aynı.

Sayının bir tam sayı olup olmadığını nasıl test ederim?

şu anki kodum:

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'te, tamsayı bölümü her zaman bir tam sayı verir.
Russell Borogove

14
"Fizz" ve "Buzz" yazdırmalısınız
wim

9
Project Euler Problem 1?
Ashutosh Dave

Yanıtlar:


229

Bunu modül operatörünü kullanarak yaparsınız, %

n % k == 0

true eğer ve ancak ntam bir katı ise değerlendirir k. İlköğretim matematikte bu, bir bölümün kalanı olarak bilinir.

Mevcut yaklaşımınızda bir bölme yapıyorsunuz ve sonuç ikisinden biri olacak

  • tamsayı bölme kullanırsanız her zaman bir tamsayı veya
  • kayan nokta bölme kullanıyorsanız her zaman bir kayan nokta.

Bölünebilirliği test etmenin yanlış yolu bu.


0% 5 == 0 da Doğru olacaktır, ancak sıfır, sıfırın tam katı değildir.
Fusion

@Fusion0 == 0*5
David Heffernan

@Chris_Rands Bunu bir cevaba koyun, kod golfü yapanlar (benim gibi) çok mutlu olur. Aslında, buraya böyle golf oynanmış bir cevap aramaya geldim.
MilkyWay90

5

%Bölünebilirliği kontrol etmek için Modül işlecini kullanabilirsiniz .
Örneğin: n % 2 == 0n'nin tam olarak 2'ye bölünebileceği ve n % 2 != 0n'nin 2'ye tam olarak bölünemeyeceği anlamına gelir.


1

Ben de aynı yaklaşıma sahiptim. Çünkü modül (%) operatörünü nasıl kullanacağımı anlamadım.

6% 3 = 0 * Bu, 6'yı 3'e bölerseniz, 3'ün 6'nın çarpanı olduğu anlamına gelir.

Şimdi bunu verdiğiniz problemle ilişkilendirmelisiniz.

eğer n% 3 == 0 * Bu demek ki, eğer sayım (n) 3'e bölünebilir ve 0 kalan kalır.

O zaman (yazdır, iade et) ifadenizi ekleyin ve devam edin


0

Belirli bir sayının bölünebilirliğini kontrol etmek için % operatörünü kullanabilirsiniz

Hayır verilip verilmediğini kontrol etmek için kod. hayır olduğunda 3 veya 5'e bölünebilir . 1000'den az aşağıda verilmiştir:

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

Bu kod, istediğiniz şeyi yapıyor gibi görünüyor.

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

Veya benzeri bir şey

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

Veya herhangi bir sayıda şey.


sorunuzu cevaplamak için: seçin ve ctrl + K girintileri. Bunu senin için bu sefer yaptım.
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!")

1
Yaptığınız düzeltmeyi ve neyin işe yaradığını açıklamak daha iyi
chans

1
Bu, bölünebilirliği test etmenin iyi bir yolu DEĞİLDİR: bir kayan bölme yapmak, bir dizgeye dönüştürmek ve sonra kesirli kısmın (kelimenin tam anlamıyla) ".0" olup olmadığını bulmak için dize manipülasyonları yapmak, en azından verimsiz ve muhtemelen yanlıştır. kayan nokta uygulaması ve dönüşümleri yapan kod.
NickD

Örneğin x=10000000000000000; b = str(x/(x-1)); bpython yorumlayıcısını deneyin .
NickD

-2

Küçük sayılar n%3 == 0için iyi olacak. Çok büyük sayılar için önce çapraz toplamı hesaplamayı ve ardından çapraz toplamın 3'ün katı olup olmadığını kontrol etmeyi öneririm:

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

2
Çapraz toplamı hesaplamak ve modül işlemini kullanmak, modül işleminin doğrudan kullanılmasından gerçekten daha hızlı mı? Öyleyse, sayı yeterince "küçük" olana kadar işlevinizi özyinelemeli olarak çağırmanız gerekmez mi?
korna

-6

Bunu dene ...

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'nın Python olduğundan şüpheliyim, bu yüzden bu geçerli bir cevap değil
MilkyWay90

Cevabınız soruyla alakalı değil
Varadaraju G

-6

jinja2 şablonu 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'da bir çözüm istendi.
jmd_dk

1
Cevabınız soruyla alakalı değil
Varadaraju G

-8

En basit yol, bir sayının tam sayı olup olmadığını test etmektir int(x) == x. Aksi takdirde, David Heffernan'ın söylediği.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.