ChatGPT解决这个技术问题 Extra ChatGPT

求一个数的除法余数

我怎样才能在 Python 中找到一个数字的除法余数?

例如:如果数为 26,除数为 7,则除数余数为 5。(因为 7+7+7=21 且 26-21=5。)

我建议查找 modulo 运算符

w
wjandrea

您正在寻找模运算符:

a % b

例如:

>>> 26 % 7
5

当然,也许他们希望你自己实现它,这也不会太难。


请注意,模运算符总是返回一个正数,因此对于负数,它可能不是您在讨论余数时所期望的:-10 % 3 == 2。然而 a/b*b + a%b == a 仍然成立,因为 python 总是朝 -Infinity 舍入,这与其他一些语言不同,后者朝 0 舍入但会返回 -1。
这是因为 Python 的 % 执行真正的模数,它返回范围 [0, divisor) 上的值,并与底除法很好地配对(朝向负无穷大)。 C 语言使用 % 运算符进行余数运算,该运算符返回范围 (-divisor, divisor) 上的值并与标准除法(趋向零)很好地配对。
t
tzot

可以使用运算符 % 发现除法的其余部分:

>>> 26%7
5

如果您同时需要商和模,则可以使用内置 divmod 函数:

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)

w
wjandrea

26 % 7(您将获得余数)

26 / 7(你会得到除数,可以是浮点值)

26 // 7(你会得到除数,只有整数值)


是否可以在一行中获得两者? divisor, remainder = 26 <operation symbol> 7
A
Alok Nayak

如果您想在一行代码中获得商和余数(更通用的用例),请使用:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)

计算 quotient 的一种更简单的方法是使用 //quotient = dividend // divisor
C
Community

从 Python 3.7 开始,有一个新的 math.remainder() 函数:

from math import remainder
print(remainder(26,7))

输出:

-2.0  # not 5

请注意,如上所述,it's not the same%

引用 documentation

math.remainder(x, y) 返回 x 相对于 y 的 IEEE 754 样式余数。对于有限 x 和有限非零 y,这是 x - n*y 的差值,其中 n 是与商 x / y 的精确值最接近的整数。如果 x / y 正好在两个连续整数的中间,则使用最接近的偶数表示 n。因此,余数 r = 余数(x,y)总是满足 abs(r) <= 0.5 * abs(y)。特殊情况遵循 IEEE 754:特别是,对于任何有限 x,remainder(x, math.inf) 是 x,对于任何非 NaN x,remainder(x, 0) 和 remaining(math.inf, x) 会引发 ValueError。如果余数运算的结果为零,则该零的符号与 x 相同。在使用 IEEE 754 二进制浮点的平台上,此操作的结果始终可以精确表示:不引入舍入误差。

Issue29962 描述了创建新函数的基本原理。


math.remainder 可能无法按照您对 python 3.7 示例的预期方式工作 >>> math.remainder(-2.99,2) -0.9900000000000002 >>> math.remainder(-3,2) 1.0
a
alys

如果你想避免取模,你也可以结合使用四个基本操作:)

26 - (26 // 7 * 7) = 5

B
Bender

除法时使用 % 而不是 /。这将为您返回剩余部分。所以在你的情况下

26 % 7 = 5

V
Venkataramanjaneyulu Kattamuru

我们可以通过使用模运算符 (%) 来解决这个问题

26 % 7 = 5;

但是 26 / 7 = 3 因为它会给出商但 % 运算符会给出余数。


如果您使用 Python 2, 26 / 7 = 3 ,对于 Python 3,26/7 约为 3.7142857142857144
G
Gilles 'SO- stop being evil'

模数将是正确的答案,但如果您手动进行,这应该可以。

num = input("Enter a number: ")
div = input("Enter a divisor: ")

while num >= div:
    num -= div
print num

仅当 num >= 0 且 dif >0 时才有效。
m
mischva11

您可以使用模运算符示例求余数

a=14
b=10
print(a%b)

它将打印 4


这个答案具有误导性,问题是明确询问“余数”。 Python 将模块用于 % 运算符,这在数学上有所不同。更多信息:stackoverflow.com/questions/4432208/…
S
S. Ahmad

如果您想要除法问题的余数,只需使用实际的余数规则,就像在数学中一样。当然这不会给你一个十进制输出。

valone = 8
valtwo = 3
x = valone / valtwo
r = valone - (valtwo * x)
print "Answer: %s with a remainder of %s" % (x, r)

如果您想以计算器格式制作,只需将 valone = 8 替换为 valone = int(input("Value One"))。对 valtwo = 3 做同样的事情,但显然不同的变量。


您必须将 valone/valtwo 转换为 int。否则它将产生一个浮点数。
c
calamari

这是 Python 中剩余的整数版本,它应该给出与 C 的 "%" 运算符相同的结果:

def remainder(n, d):
    return (-1 if n < 0 else 1) * (abs(n) % abs(d))

预期成绩:

remainder(123, 10)   ==  3
remainder(123, -10)  ==  3
remainder(-123, 10)  == -3
remainder(-123, -10) == -3

u
user13790410

您可以定义一个函数并使用 2 个值(例如 rem(number1,number2) 返回 number1%number2 然后创建一段时间并将其设置为 true 然后为您的函数打印出两个输入,其中包含数字 1 和 2 然后 print(rem (编号 1,编号 2)


请添加一个工作示例。解释一些理论代码可能很难理解。