python 中的模块化加法

发布于 2024-11-24 00:38:21 字数 187 浏览 1 评论 0原文

我想将数字 y 添加到 x,但让 x 环绕以保持在 0 到 48 之间。注意 y 可以为负数,但其幅度永远不会大于 48。有没有比以下更好的方法:

x = x + y
if x >= 48:
    x = x - 48
elif x < 0:
    x = x + 48

I want to add a number y to x, but have x wrap around to remain between zero and 48. Note y could be negative but will never have a magnitude greater than 48. Is there a better way of doing this than:

x = x + y
if x >= 48:
    x = x - 48
elif x < 0:
    x = x + 48

?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

疯狂的代价 2024-12-01 00:38:21
x = (x + y) % 48

模运算符是你的朋友。

>>> 48 % 48
0: 0
>>> 49 % 48
1: 1
>>> -1 % 48
2: 47
>>> -12 % 48
3: 36
>>> 0 % 48
4: 0
>>> 12 % 48
5: 12
x = (x + y) % 48

The modulo operator is your friend.

>>> 48 % 48
0: 0
>>> 49 % 48
1: 1
>>> -1 % 48
2: 47
>>> -12 % 48
3: 36
>>> 0 % 48
4: 0
>>> 12 % 48
5: 12
一紙繁鸢 2024-12-01 00:38:21

如果您正在进行模运算,则只需使用模运算符即可。

x = (x + y) % 48

If you're doing modular arithmetic, you simply need to use the modulo operator.

x = (x + y) % 48
梦晓ヶ微光ヅ倾城 2024-12-01 00:38:21

不仅仅是 (x+ y)% 48 适合您。在此处查看有关模的更多信息。

Wouldn't just (x+ y)% 48 be suitable for you. See more on modulo here.

楠木可依 2024-12-01 00:38:21

您可以使用模运算符:

x = (x+y) % 48

you can use the modulo operator:

x = (x+y) % 48
动次打次papapa 2024-12-01 00:38:21

您可以使用

x = (x+y) % 48

它为任何数字提供正的x

You can just use

x = (x+y) % 48

which will give you positive x for any numbers.

一袭白衣梦中忆 2024-12-01 00:38:21

(x + y) % 48

将 48 替换为您喜欢的任何内容。

(x + y) % 48

Replace 48 with whatever you please.

揽清风入怀 2024-12-01 00:38:21

您还可以创建一个类来处理模算术,就像这里所做的那样:
http://anh.cs.luc.edu/331/code/mod_arith.py
http://anh.cs.luc.edu/331/code/mod.py

You could also make a class to handle modular arithmetic, like have been done here:
http://anh.cs.luc.edu/331/code/mod_arith.py
http://anh.cs.luc.edu/331/code/mod.py

总以为 2024-12-01 00:38:21

除了模 n 的余数之外,您可能还需要除法的结果,因此这里有一个秒到年+天+等的转换器,它演示了 divmod 函数。当然,人们可以继续使用“lustrum”、“几十年”、“几十个”、“世纪”或“两周”等。 ;)

nsec = 1989550000
mnt2sec = 60; hrs2mnt=60; day2hrs=24; yrs2day=365
mnt, dus = divmod(nsec, mnt2sec)
hrs, dum = divmod(mnt, hrs2mnt)
dys, duh = divmod(hrs, day2hrs)
yrs, dud = divmod(dys, yrs2day)
print(f'{nsec} s = {yrs} y, {dud} d, {duh} h, {dum} m, {dus} s')
# check
asec = (dus+mnt2sec*(dum+hrs2mnt*(duh+day2hrs*(dud+yrs*yrs2day))))
assert asec == nsec, "wrong sum rule"

You may need the result of the division besides the remainder modulo n, so here's a seconds-to-year+days+etc translator which demonstrates the divmod function. Of course, one could go on to lustrum, decades, scores, century, or use fortnight or such. ;)

nsec = 1989550000
mnt2sec = 60; hrs2mnt=60; day2hrs=24; yrs2day=365
mnt, dus = divmod(nsec, mnt2sec)
hrs, dum = divmod(mnt, hrs2mnt)
dys, duh = divmod(hrs, day2hrs)
yrs, dud = divmod(dys, yrs2day)
print(f'{nsec} s = {yrs} y, {dud} d, {duh} h, {dum} m, {dus} s')
# check
asec = (dus+mnt2sec*(dum+hrs2mnt*(duh+day2hrs*(dud+yrs*yrs2day))))
assert asec == nsec, "wrong sum rule"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文