คุณจะตรวจสอบได้อย่างไรว่าตัวเลขนั้นหารด้วยจำนวนอื่น (Python) ได้หรือไม่?


113

ฉันต้องการทดสอบว่าแต่ละตัวเลขตั้งแต่ 1 ถึง 1,000 เป็นผลคูณของ 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

14
คุณควรจะพิมพ์ "ฟอง" และ "ข่าวลือ"
Wim

9
โครงการออยเลอร์ปัญหา 1?
Ashutosh Dave

คำตอบ:


229

คุณทำได้โดยใช้ตัวดำเนินการโมดูลัส %

n % k == 0

ประเมินความจริงถ้าหากเป็นหลายที่แน่นอนของn kในคณิตศาสตร์ระดับประถมศึกษาสิ่งนี้เรียกว่าส่วนที่เหลือจากการหาร

ในแนวทางปัจจุบันของคุณคุณทำการหารและผลลัพธ์จะเป็นอย่างใดอย่างหนึ่ง

  • เป็นจำนวนเต็มเสมอหากคุณใช้การหารจำนวนเต็มหรือ
  • ลอยเสมอถ้าคุณใช้การแบ่งจุดลอย

มันเป็นวิธีที่ผิดในการทดสอบความแตกแยก


0% 5 == 0 จะเป็น True เช่นกัน แต่ศูนย์ไม่ใช่ผลคูณของศูนย์แน่นอน
Fusion

@Fusion0 == 0*5
David Heffernan

@Chris_Rands เอาคำตอบนั้นมาให้คนที่ทำ Code-Golf (เช่นผม) จะมีความสุขมาก อันที่จริงฉันมาที่นี่เพื่อหาคำตอบแบบนักกอล์ฟ
MilkyWay90

5

คุณสามารถใช้%ตัวดำเนินการโมดูลัสเพื่อตรวจสอบการหารได้
ตัวอย่างเช่น: 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ลงตัวเมื่อไม่ น้อยกว่า 1,000 จะได้รับด้านล่าง:

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ใช้ python interpreter
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 ดังนั้นนี่จึงไม่ใช่คำตอบที่ถูกต้อง
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

-8

วิธีที่ง่ายที่สุดคือทดสอบว่าตัวเลขเป็นจำนวนเต็มint(x) == xหรือไม่ มิฉะนั้นสิ่งที่ David Heffernan พูด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.