Làm cách nào để bạn kiểm tra xem một số có chia hết cho một số khác hay không (Python)?


112

Tôi cần kiểm tra xem mỗi số từ 1 đến 1000 là bội của 3 hay bội của 5. Cách tôi nghĩ mình sẽ làm là chia số cho 3 và nếu kết quả là số nguyên thì nó sẽ là bội số của 3. Tương tự với 5.

Làm cách nào để kiểm tra xem số có phải là số nguyên hay không?

đây là mã hiện tại của tôi:

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
Trong Python 2.x, phép chia số nguyên luôn cho ra số nguyên.
Russell Borogove

14
Bạn sẽ in "Fizz" và "Buzz"
wim

9
Dự án Euler Vấn đề 1?
Ashutosh Dave

Câu trả lời:


228

Bạn làm điều này bằng cách sử dụng toán tử mô-đun, %

n % k == 0

đánh giá true nếu và chỉ khi nlà bội số chính xác của k. Trong toán học sơ cấp, đây được gọi là phần dư từ một phép chia.

Trong cách tiếp cận hiện tại, bạn thực hiện phép chia và kết quả sẽ là

  • luôn là số nguyên nếu bạn sử dụng phép chia số nguyên hoặc
  • luôn luôn là float nếu bạn sử dụng phép chia dấu phẩy động.

Đó chỉ là một cách sai lầm để kiểm tra tính chia hết.


0% 5 == 0 cũng sẽ đúng, nhưng 0 không phải là bội số chính xác của 0.
hợp

@Fusion0 == 0*5
David Heffernan

@Chris_Rands Đặt điều đó thành câu trả lời, những người làm code-gôn (như tôi) sẽ rất vui. Trên thực tế, tôi đến đây để tìm kiếm một câu trả lời như thế.
MilkyWay90

5

Bạn chỉ có thể sử dụng %toán tử Modulus để kiểm tra tính chia hết.
Ví dụ: n % 2 == 0nghĩa là n chia hết cho 2 và n % 2 != 0n không chia hết cho 2.


1

Tôi đã có cùng một cách tiếp cận. Bởi vì tôi không hiểu cách sử dụng toán tử mô-đun (%).

6% 3 = 0 * Điều này có nghĩa là nếu bạn chia 6 cho 3 bạn sẽ không có số dư, 3 là thừa số của 6.

Bây giờ bạn phải liên hệ nó với vấn đề đã cho của bạn.

if n% 3 == 0 * Điều này nói lên rằng, nếu số của tôi (n) chia hết cho 3 để lại phần dư là 0.

Thêm câu lệnh then (in, trả lại) và tiếp tục


0

Bạn có thể sử dụng toán tử% để kiểm tra tính chất chia hết của một số nhất định

Mã để kiểm tra xem có cho không. chia hết cho 3 hoặc 5 khi không. dưới 1000 được đưa ra dưới đây:

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

Mã này dường như thực hiện những gì bạn đang yêu cầu.

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

Hoặc một cái gì đó như

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

Hoặc bất kỳ số thứ.


để trả lời câu hỏi của bạn: chọn và ctrl + K thụt lề. Tôi đã làm điều đó cho bạn cho thời gian này.
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
Tốt hơn hết là giải thích bản sửa lỗi bạn đã đưa ra và điều gì đã làm cho nó hoạt động
chans

1
Đó KHÔNG phải là cách tốt để kiểm tra tính chia hết: thực hiện phép chia float, chuyển đổi thành chuỗi và sau đó thực hiện các thao tác với chuỗi để tìm xem phần phân số có (nghĩa đen) ".0" ít nhất là không hiệu quả hay không và có thể sai tùy thuộc vào triển khai dấu phẩy động và mã thực hiện chuyển đổi.
NickD

Ví dụ: thử x=10000000000000000; b = str(x/(x-1)); btrong trình thông dịch python.
NickD

-2

Đối với số lượng nhỏ n%3 == 0sẽ ổn. Đối với các số rất lớn, tôi đề xuất tính tổng chéo trước và sau đó kiểm tra xem tổng có phải là bội của 3 hay không:

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

2
Tính tổng chéo và sử dụng phép toán môđun có thực sự nhanh hơn so với trực tiếp sử dụng phép toán môđun không? Nếu vậy, bạn không nên gọi hàm của mình một cách đệ quy cho đến khi số lượng đủ "nhỏ"?
bấm còi

-6

Thử cái này ...

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

Tôi nghi ngờ Java là Python, vì vậy đây không phải là một câu trả lời hợp lệ
MilkyWay90

Câu trả lời của bạn là không liên quan đến câu hỏi
Varadaraju G

-6

jinja2 mẫu 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
Một giải pháp bằng Python đã được yêu cầu.
jmd_dk

1
Câu trả lời của bạn là không liên quan đến câu hỏi
Varadaraju G

-7

Cách đơn giản nhất là kiểm tra xem một số có phải là số nguyên hay không int(x) == x. Nếu không, những gì David Heffernan đã nói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.