python中分数的余数

python中分数的余数,python,modulo,Python,Modulo,我不理解分数的余数。1/2的余数是1,而同一分数的余数是不同的,但没有简化 任何帮助都将不胜感激 我可以理解3%2=1,但我不理解以下内容: print(1%2) =1 print(2%4) =2 这些不是分数,它们在技术上是简单的余数计算,是模运算,但这一区别与正操作数无关。1%2表示从1中删除所有完整的2后,剩下什么?2%4表示从2中删除所有完整的4后,还剩下什么?因为在这两种情况下都没有完整的2或4拆卸,剩下什么?这是全部金额 如果您想要实际分数,将提供您期望的结果: from fra

我不理解分数的余数。1/2的余数是1,而同一分数的余数是不同的,但没有简化

任何帮助都将不胜感激

我可以理解3%2=1,但我不理解以下内容:

print(1%2)
=1

print(2%4)
=2

这些不是分数,它们在技术上是简单的余数计算,是模运算,但这一区别与正操作数无关。1%2表示从1中删除所有完整的2后,剩下什么?2%4表示从2中删除所有完整的4后,还剩下什么?因为在这两种情况下都没有完整的2或4拆卸,剩下什么?这是全部金额

如果您想要实际分数,将提供您期望的结果:

from fractions import Fraction

print(Fraction(1, 2) == Fraction(2, 4))
将打印为True,因为作为分数量,而不是余数计算,它们是等价的

同样,执行真正的除法有时也会起作用,例如:

print(1 / 2 == 2 / 4)

也打印真实。但是,在一般情况下,这不太可靠,因为。

您要求的是mod%符号,它与division/不同。Mod运算符返回第一个参数除以第二个参数后的余数,因此如果将5除以2,则余数为1。如果你试着把一个较小的数字除以一个较大的数字,你得到的是较小的数字1/2是不可除的,所以1是余数。

如果你把20个甜甜圈分给3个人,每个人得到6个甜甜圈,剩下2个甜甜圈

如果你把一个甜甜圈分给两个人,每个人都会得到0个甜甜圈,剩下1个甜甜圈

如果你把2个甜甜圈分给4个人,每个人都会得到0个甜甜圈,剩下2个甜甜圈。

了解模运算符%,及其镜像,以及它们的用途

模运算符%给出除法的余数。1%2就像1除以2,但停止任何进一步的计算,因为这是我们不使用十进制表示法所能做的,并保留未除以的部分,即1

使用模运算符%在概念上没有考虑1/2等于2/4。对于表达式op1%op2,op2表示的是一个值的范围,而op1表示的值可以减少到op1表示的范围内的值

为了说明这在编程中的有用性,我将使用棋盘作为示例。假设我有一个代表电路板的一维数组。例如,如果在代码中的某一行,我需要将数组索引(比如23个正方形)转换为国际象棋符号file&rank->h6,我可以这样做

>>> board = ['br', 'bn', 'bb', 'bq', 'bk', 'bb', 'bn', 'br', # 8
...          'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', 'bp', # 7
...          None, None, None, None, None, None, None, None, # 6
...          None, None, None, None, None, None, None, None, # 5
...          None, None, None, None, None, None, None, None, # 4
...          None, None, None, None, None, None, None, None, # 3
...          'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', 'wp', # 2
...          'wr', 'wn', 'wb', 'wq', 'wk', 'wb', 'wn', 'wr'] # 1
...         # a     b     c     d     e     f      g     h
>>>
>>> def position(sq_index):
...    return { 'file': sq_index % 8, 'rank': 7 - sq_index // 8 }
...
>>> position(23)
{'file': 7, 'rank': 5}
>>>
>>> def chess_notation(pos):
...     alpha = 'abcdefgh'
...     return alpha[pos['file']] + str(pos['rank'] + 1) # + 1 because ranks
...                                                      # start at 1 in 
...                                                      # notation.
...
>>> chess_notation(position(23))
'h6'
在国际象棋中,棋盘x轴上的列称为“文件”,y轴上的行称为“等级”

请注意,position的实现中有sq_索引%8 sq_索引模8,用于确定文件值。棋盘上的文件从“a”列到“h”列0到7。如果我们从左到右从0数到7,我们就到了最后,然后在下一个等级重复我们的计数。到目前为止,我们可能已经计算的方块数可能是9,但使用9%8,我们知道我们的手指现在位于“b”文件9%8=1上

因此,无论我们有什么指数在0到63之间,它都可以减少到0到7之间的值。如果索引n从0依次递增到63,则n%8将生成0、1、2、3、4、5、6、7、0、1、2、3、。。等等

获得秩的计算是类似的操作。我们有sq_索引//8。//运算符或floor division运算符生成一个整数结果,其余数基本上与%相反。这与我们在math.floor 1/8中实现时得到的结果相同是Python3的一个特性。对于Python3,1/8生成浮点结果,而1//8生成整数值

那么,假设我们再次计算平方,0到7。在每个平方n_sq//8产生相同的值0。然后我们继续计算下一个等级,从8到15。每个索引值产生1,例如11//8=1。等等代码中的board数组的秩编号为8到1,因此要转换为正确的秩值,它是8-sq_index//8


注意:对于Python 2,//运算符和/运算符都产生一个整数值。Python2和Python3之间的这种差异可能会在迁移时引起一些混乱。

huh,为什么在谈论余数时会出现分数呢?这里没有分数。2除以4,因为2小于4,所以整个2将是一个余数。尝试5%2您将得到1您可能会混淆%2和/。后者是除法,其中1/2和2/4在Python 3中具有相同的结果这是一个完全不同的操作。所以,我看到这得到了很多反对票。。但是有些人才刚刚开始学习Python,或者一般的编程。他们可能会有同样的困惑,并在搜索过程中遇到这个问题。因此,我花了一些精力来写一篇关于%和//如何工作以及如何在下面的程序中使用它们的好的描述=你有没有一个例子,真正的除数是
开玩笑不管用?“我认为它的作用不仅仅是有时”。@HeapOverflow:我使用的有时是不总是意义上的,而不是不经常意义上的。纯实数除法通常适用于整数,可能总是在CPython上,因为CPython使用了一些技巧来处理整数的大部分数学运算,以最小化浮点误差,在游戏的后期进行转换;它不只是像C代码默认情况下那样转换为浮点和除法。但是,如果涉及到更高级的算术,而你没有舍入或使用math.isclose或类似的方法来修复它,它最终会以其他方式咬你,例如1/10+2/10!=3/10.好的,是的,如果你做进一步的操作,那么很快就会引起问题。我以为你指的是你展示的测试,两个等分。谢谢,我在我的帖子中说分数似乎用了错误的措辞。这就是我不理解的逻辑。