숫자가 다른 숫자 (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에서 정수 나누기는 항상 정수를 생성합니다.
Russell Borogove 2011

14
"Fizz"및 "Buzz"를 인쇄해야합니다.
wim

9
프로젝트 오일러 문제 1?
Ashutosh Dave

답변:


228

모듈러스 연산자를 사용하여이 작업을 수행합니다. %

n % k == 0

n의 정확한 배수 인 경우에만 참으로 평가됩니다 k. 초등 수학에서 이것은 나눗셈의 나머지로 알려져 있습니다.

현재 접근 방식에서는 분할을 수행하고 결과는

  • 정수 나눗셈을 사용하는 경우 항상 정수 또는
  • 부동 소수점 나누기를 사용하는 경우 항상 부동 소수점입니다.

분할 가능성을 테스트하는 것은 잘못된 방법입니다.


0 % 5 == 0도 참이지만 0은 0의 배수가 아닙니다.
Fusion

@Fusion0 == 0*5
데이비드 헤퍼 넌

@Chris_Rands 대답에 넣으면 (나와 같은) 코드 골프를하는 사람들은 매우 행복 할 것입니다. 사실, 나는 그런 골프 답을 찾기 위해 여기에 왔습니다.
MilkyWay90

5

%Modulus 연산자를 사용 하여 분할 가능성을 확인할 수 있습니다 .
예를 들어 : n % 2 == 0n은 정확히 2로 나눌 수 있고 n은 정확히 2로 나눌 수 n % 2 != 0없음을 의미합니다.


1

나도 같은 접근 방식을 사용했습니다. module (%) 연산자를 사용하는 방법을 이해하지 못했기 때문입니다.

6 % 3 = 0 * 이는 6을 3으로 나누면 나머지가없고 3은 6의 인수임을 의미합니다.

이제 그것을 주어진 문제와 연관시켜야합니다.

if 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 들여 쓰기. 이번에는 당신을 위해 그렇게했습니다.
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
귀하가 제공 한 수정 사항과 그 효과를 설명하는 것이 더 좋습니다
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
교차 합을 계산하고 모듈러스 연산을 사용하는 것이 모듈러스 연산을 직접 사용하는 것보다 정말 빠릅니까? 그렇다면 숫자가 충분히 "작을"때까지 함수를 재귀 적으로 호출해야하지 않습니까?
honk

-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);    
  }
}

이 유효한 대답하지 그래서 나는, 자바, 파이썬 의심
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

1
당신의 대답은 질문에 관련이 없습니다
Varadaraju G

-7

가장 간단한 방법은 숫자가 정수인지 여부를 테스트하는 것입니다 int(x) == x. 그렇지 않으면 David Heffernan이 말한 것.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.