Як перевірити, чи ділиться число на інше число (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
Ви повинні друкувати "Fizz" та "Buzz"
wim

9
Проблема проекту Euler 1?
Ашутош Дейв

Відповіді:


228

Ви робите це за допомогою оператора модуля, %

n % k == 0

оцінює істину, якщо і тільки якщо nє точним кратнимk . У елементарній математиці це відоме як залишок від поділу.

У вашому поточному підході ви виконуєте поділ, і результат буде будь-яким

  • завжди ціле число, якщо ви використовуєте ціле ділення, або
  • завжди поплавок, якщо ви використовуєте поділ з плаваючою комою.

Це просто неправильний шлях для тестування на подільність.


0% 5 == 0 було б істинно, але нуль не є точним кратним нулю.
Fusion

@Fusion0 == 0*5
Девід

@Chris_Rands Якщо відповісти, люди, які займаються кодом-гольф (як я), були б дуже раді. Справді, я прийшов сюди, шукаючи відповідь на гольф, як це.
MilkyWay90

5

Ви можете просто скористатися %оператором Modulus, щоб перевірити подільність.
Наприклад: n % 2 == 0означає, що n точно ділиться на 2, а n % 2 != 0означає, що n точно не ділиться на 2.


1

У мене був такий самий підхід. Тому що я не розумів, як використовувати оператор модуля (%).

6% 3 = 0 * Це означає, що якщо ви розділите 6 на 3, у вас не залишиться залишку, 3 - коефіцієнт 6.

Тепер ви повинні пов’язати це із заданою вами проблемою.

якщо n% 3 == 0 * Це означає, якщо моє число (n) ділиться на 3, залишаючи залишок 0.

Додайте потім свою заяву (друк, повернення) та продовжуйте свою


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

1
Це НЕ є гарним способом перевірити подільність: зробити поділ на поплавці, перетворити на рядок, а потім виконати маніпуляції з рядком, щоб встановити, чи є дробова частина (буквально) ".0" як мінімум неефективна, а можливо, неправильна залежно від реалізація з плаваючою комою та код, який здійснює перетворення.
NickD

Наприклад, спробуйте x=10000000000000000; b = str(x/(x-1)); bв інтерпретаторі пітона.
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, тому це
неправдива

Ваша відповідь не стосується питання
Varadaraju G

-6

fizzbuz шаблону jinja2:

<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

Найпростіший спосіб - перевірити, чи є число цілим числом int(x) == x. Інакше те, що сказав Девід Геффернан.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.