【问题标题】:Weird Outputs of Modulo Operator in Python3Python3 中模运算符的奇怪输出
【发布时间】:2018-03-28 01:51:04
【问题描述】:

我正在 python3 中开发模块化排序器,并注意到在使用 mod 时与输入变量的符号有关的奇怪行为。我打算让它在除以循环长度后按余数对值进行排序。

c = 4 / 14 = 0 r **4**", "c = 18 / 14 = 1 r **4**", and "c = 32 / 14 = 2 r **4**

所有这些都是第 4 个位置值,因为它们离开 4。但是,如果任何输入变量为负,则结果不是我想要的。关于它是如何工作的任何想法(我可能会在以后的编码中使用这个奇怪的功能)?

a = 4     #the value for sorting
b = 14    #the length of the cycle before it reaches the 0 position

def modS(val, cyc):
    c = val % cyc
    print(c)

modS(a, b)

例如,

a = 4
b = 14

打印4

a = -4
b = 14

打印10

a = 4
b = -14

打印-10

a = -4
b = -14

打印-4

这些打印出来的值可能对 pH 计算等有用,但对我来说不是。

【问题讨论】:

  • 所以 Python 的行为就像文档中描述的那样?离谱。您的问题是什么?
  • 我想知道这是如何工作的,以及如何更正输出以将位置作为循环中的绝对值。

标签: python-3.x operator-keyword modulo


【解决方案1】:

我还不能具体说明,所以我会尽量回答我认为你想问的问题

尝试得到你想要的答案,即使它是否定的

我建议使用the abs() method 将所有数字视为正数,例如,

def modS(val, cyc):
    c = abs(val) % abs(cyc)
    print(c)

为您的数据集提供 4。

否则,如果您只是想知道为什么会发生这种情况,我建议您阅读this other question 了解同样的事情。

【讨论】:

  • 酷。你知道普通模组输出的其他用途吗?
  • 最流行的例子是RSA encryption,但对于日常使用,有时我们需要知道整数除法的余数。
猜你喜欢
  • 2020-07-30
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2020-09-08
相关资源
最近更新 更多