Python模运算符给出意想不到的结果

hyt*_*ucx 1 python modulo

我是Python的新手,并且模数有问题.

这是代码:

for i in range(ord('a'), ord('z')+1):
    print chr(((i+2) % 97) + 97 )
Run Code Online (Sandbox Code Playgroud)

检测到的结果是cdef...a.但是,一旦我们到达,我就无法获得所需的模块行为z.

Amb*_*ber 6

因为97不是你想要包装的 - 你想要在ord('z')= 122 处包装,然后添加ord('a')(97)的值.

你真正需要做的完整数学运算是转移到偏移量,然后回到集合.例如...

for i in range(ord('z') - ord('a') + 1): # equivalent to range(26); i.e. 0-25
    print chr(((i+2) % 26) + ord('a')) # results in 2+97 'c', 3+97 'd', etc.
Run Code Online (Sandbox Code Playgroud)

你的现有代码不起作用的原因是因为你的i+2总是大于97(因为你的i起点ord('a')是97,从那里开始),所以% 97实际上只是- 97,因此你的打印线实际上是这样的:

print chr(((i+2) - 97) + 97 )
Run Code Online (Sandbox Code Playgroud)

减少到......

print chr((i+2) - 97 + 97)
Run Code Online (Sandbox Code Playgroud)

这显然是公正的print chr(i+2).