Hướng dẫn python modulo negative numbers - python modulo số âm

Các câu trả lời khác, đặc biệt là câu trả lời đã chọn đã trả lời rõ ràng câu hỏi này khá tốt. Nhưng tôi muốn trình bày một cách tiếp cận đồ họa cũng có thể dễ hiểu hơn, cùng với mã Python để thực hiện mô đun toán học bình thường trong Python.

Python Modulo cho người giả

Hàm modulo là một hàm định hướng mô tả lượng chúng ta phải di chuyển xa hơn hoặc sau sau khi các bước nhảy toán học mà chúng ta thực hiện trong quá trình phân chia trên trục X của các số vô hạn. Vì vậy, giả sử bạn đang làm 7%3

Hướng dẫn python modulo negative numbers - python modulo số âm

Vì vậy, theo hướng chuyển tiếp, câu trả lời của bạn sẽ là +1, nhưng theo hướng lạc hậu-

Câu trả lời của bạn sẽ là -2. Cả hai đều là toán học chính xác.mathematically.

Tương tự, bạn cũng sẽ có 2 mô đun cho các số âm. Đối với ví dụ:

def newMod(a,b):
    res = a%b
    return res if not res else res-b if a<0 else res
0, có thể dẫn đến cả -1 hoặc +2 như được hiển thị -

Hướng về phía trước


Hướng lạc hậu


Trong toán học, chúng tôi chọn các bước nhảy hướng nội, tức là hướng về phía trước cho một số dương và hướng lùi cho các số âm.

Nhưng trong Python, chúng tôi có một hướng tiến cho tất cả các hoạt động modulo tích cực. Do đó, sự nhầm lẫn của bạn -

>>> -5 % 4 
3

>>> 5 % 4
1

Dưới đây là mã Python cho loại nhảy bên trong trong Python:

def newMod(a,b):
    res = a%b
    return res if not res else res-b if a<0 else res

Mà sẽ cho -

>>> newMod(-5,4)
-1

>>> newMod(5,4)
1

Nhiều người sẽ phản đối phương pháp nhảy hướng nội, nhưng ý kiến ​​cá nhân của tôi là, phương pháp này tốt hơn !!

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọcmodulo of a negative number is a bit more complex mathematics which is done behind the program of Python. If we don’t understand the mathematics behind the modulo of negative number than it will become a huge blender.
     

    Bàn luận

    Lấy modulo của một số âm là một toán học phức tạp hơn một chút, được thực hiện đằng sau chương trình Python. Nếu chúng ta không hiểu toán học đằng sau modulo của số âm hơn thì nó sẽ trở thành một máy xay sinh tố khổng lồ. & NBSP;

    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2

    Toán học đằng sau modulo tiêu cực:Python’s modulo operator (%) always return a number having the same sign as the denominator. What happens behind the scene is that Python applies the distribute law of Modulo operator which is – 

    (a+b)mod n = [(a mod n)+(b mod n)]mod n

    Hãy cùng xem xét một ví dụ, nơi chúng tôi muốn tìm -5mod4, tức là -5%4. Tất cả các bạn phải tự hỏi rằng câu trả lời sẽ theo quy tắc dưới đây - & nbsp;

    Nhưng đây không phải là câu trả lời mà chúng tôi nhận được, khi chúng tôi sẽ chạy mã trên, chúng tôi sẽ nhận được câu trả lời là 3. Điều này là do toán tử modulo Python (%) luôn trả về một số có cùng dấu với mẫu số. Điều xảy ra đằng sau hiện trường là Python áp dụng luật phân phối của nhà điều hành modulo là - & nbsp;

    Để áp dụng python toán học này phá vỡ câu lệnh đã cho là - & nbsp;

    Examples:

    -5%4 = (-2*4 + 3) % 4 = 3

    -5 % 2 = (-3*2 + 1) % 2 = 1

    Điều này đã được thực hiện để (-2*4)%4 sẽ đưa ra câu trả lời là 0 (vì chúng tôi luôn nhận được bội số của số chia như số đầu tiên của chúng tôi) và kết quả tổng thể sẽ là 3. Hãy xem thêm các ví dụ để hiểu rõ hơn . 
    In this example we can see that by using this mathematics, we are able to perform and understand the negative modulo.
     

    Python3

    -3 % 7 = (-1*7 + 4) % 7 = 4 & nbsp; -5 % 2 = (-3*2 + 1) % 2 = 1

    Ví dụ #1: & nbsp; Trong ví dụ này, chúng ta có thể thấy rằng bằng cách sử dụng toán học này, chúng ta có thể thực hiện và hiểu modulo âm. & NBSP;

    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    0
    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    1

    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    0
    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    3

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    1
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    4
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    5
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    6

    3
    3

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    7
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    9
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    >>> newMod(-5,4)
    -1
    
    >>> newMod(5,4)
    1
    
    1
    >>> newMod(-5,4)
    -1
    
    >>> newMod(5,4)
    1
    
    222

    Python3

    Đầu ra:

    Ví dụ #2:

    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    0
    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    1

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    1
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    >>> newMod(-5,4)
    -1
    
    >>> newMod(5,4)
    1
    
    6
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    5
    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    9

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    1
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    4
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    5
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    6

    4
    0

    def newMod(a,b): res = a%b return res if not res else res-b if a<0 else res 7def newMod(a,b): res = a%b return res if not res else res-b if a<0 else res 2 def newMod(a,b): res = a%b return res if not res else res-b if a<0 else res 9def newMod(a,b): res = a%b return res if not res else res-b if a<0 else res 3>>> newMod(-5,4) -1 >>> newMod(5,4) 1 1>>> newMod(-5,4) -1 >>> newMod(5,4) 1 222

    Đầu ra:

    Ví dụ #2:

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    1
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    >>> newMod(-5,4)
    -1
    
    >>> newMod(5,4)
    1
    
    6
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    5
    -5/4 = 1.25 
    and
    math.floor(-1.25) = -2
    9

    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    7
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    2
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    3
    (a+b)mod n = [(a mod n)+(b mod n)]mod n
    3
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    5
    def newMod(a,b):
        res = a%b
        return res if not res else res-b if a<0 else res
    
    6

    • -5/4 = 1.25 
      and
      math.floor(-1.25) = -2
      0
      -5/4 = 1.25 
      and
      math.floor(-1.25) = -2
      3

    Bạn đã bao giờ tự hỏi làm thế nào nó hoạt động?

    • Ảnh của tác giả.

    Đây là điều tôi học được gần đây và nghĩ rằng đáng để chia sẻ cho rằng nó khá ngạc nhiên khi tôi và đó là một sự thật siêu hữu ích để học hỏi. Làm thế nào để Python xử lý hoạt động modulo với số âm? Vì vậy, hãy để giữ cho nó ngắn gọn và ngọt ngào và đi thẳng vào nó.

    • Biểu tượng
      def newMod(a,b):
          res = a%b
          return res if not res else res-b if a<0 else res
      
      5 trong Python được gọi là toán tử modulo. Nó trả về phần còn lại của việc chia toán hạng tay trái cho toán hạng bên phải. Nó được sử dụng để có được phần còn lại của một vấn đề phân chia. Tiếtfreecodecamp

    Cú pháp cơ bản là:

    A % B = r

    • Trong ví dụ trước, A được chia cho B và R (nghĩa là phần còn lại) được trả về. Hãy cùng xem một ví dụ với các số ngay bây giờ:

    7 % 2 = 1

    • Kết quả của ví dụ trước là 1. 2 đi vào 7 ba lần và còn lại 1 lần. Theo cách tương tự, nếu chúng ta chọn hai số trong đó b> a, chúng ta sẽ nhận được những điều sau:

    3 % 4 = 3

    • mod = a - math.floor (a/b) * cơ sở

    Ví dụ: làm việc với một trong những ví dụ trước đây của chúng tôi, chúng tôi đã nhận được:

    • mod = 7 - math.floor (7/2) * 2
    • mod = 7 trận3*2 = 1

    Và logic tổng thể hoạt động theo các cơ sở sau:

    • a/b = q với phần còn lại r
    • Đó là: b*q + r = a và 0

    Bây giờ, nếu chúng ta muốn mối quan hệ này mở rộng đến các số âm, có một vài cách xử lý trường hợp góc này. Theo Wikipedia, trong lý thuyết số toán học, các nhà toán học thích bám vào sàn đối với vô cùng tiêu cực như trong ví dụ sau:

    • -500/27 = -18,51
    • math.floor (-500/27) = -19

    Python theo cùng một logic. Tại sao? Theo Guido Van Rossum, người tạo ra Python, tiêu chí này có một số ứng dụng thú vị. Ví dụ, xem xét việc lấy dấu thời gian POSIX (vài giây kể từ đầu năm 1970) và biến nó thành thời gian trong ngày. Vì có 24*3600 = 86.400 giây trong một ngày, tính toán này chỉ đơn giản là T % 86.400. Nhưng nếu chúng ta thể hiện thời gian trước năm 1970 bằng cách sử dụng các số âm, các tiêu chí khác được sử dụng sẽ cho kết quả vô nghĩa, trong khi sử dụng quy tắc sàn hoạt động tốt.

    Cuối cùng, hãy tính đến những điều sau khi làm việc với số âm:

    • Nếu a <0 thì 0
    • But if b < 0 then 0 >= r > b.

    Cuối cùng, hãy để xem một ví dụ nhanh cho A = -500 và B = 12:

    • -500/12 = -41,67
    • -500 % 12 = 4
    • -500 // 12 = -42

    Sau đó, chúng ta có thể kiểm tra B*Q + R = A:

    • 12 * -42 + 4 = -500

    Để kết thúc bài viết này, hãy để Lừa xem một ứng dụng thú vị của toán tử modulo với số âm: chuyển đổi một giờ được viết trong đồng hồ 24 giờ thành đồng hồ 12 giờ. Thách thức có vẻ dễ dàng, phải không? Ví dụ, 23%2 sẽ cho chúng ta 11 và 15%12 sẽ cho chúng ta 3 chính xác những gì chúng ta muốn! Bây giờ, cốt truyện dày lên khi chúng tôi đạt được số 12 vì 12%12 sẽ cho 0, tức là nửa đêm và không trưa.

    Giải pháp ở đây là sử dụng toán tử modulo với số âm. Ví dụ, -22%12 sẽ cho chúng ta 2 và -19/12 sẽ cho chúng ta 5. Theo nguyên tắc, loại hoạt động này sẽ luôn cung cấp cho chúng ta bao nhiêu đơn vị chúng ta còn lại cho đến bội số tiếp theo của mẫu số của chúng ta. Trong ví dụ đầu tiên của chúng tôi, chúng tôi thiếu hai giờ cho đến 12x2 và theo cách tương tự, -34%12 cũng sẽ cho chúng tôi 2 vì chúng tôi sẽ còn hai giờ cho đến 12x3.

    Vì vậy, trở lại với thử thách ban đầu của chúng tôi là chuyển đổi một giờ được viết trong đồng hồ 24 giờ thành đồng hồ 12 giờ, chúng tôi có thể viết như sau:

    def convert24to12(hour):return 12 — ((- hour) % 12)

    Đó là tất cả cho ngày hôm nay. Don Tiết quên xem một số câu chuyện khác của tôi về chương trình tốt hơn:

    Và nếu bạn muốn nhận được các bài viết mới nhất của tôi trực tiếp trên email của bạn, chỉ cần đăng ký nhận bản tin của tôi :). Hẹn gặp bạn xung quanh, và cảm ơn vì đã đọc! Cảm ơn vì đã đọc!f you want to receive my latest articles directly on your email, just subscribe to my newsletter :). See you around, and thanks for reading! Thanks for reading!