[Tutor] Modulus wierdness?

David Clymer david at zettazebra.com
Tue Nov 16 02:10:29 CET 2004


Just for fun & practice, I'm implementing a character rotation cypher
(e.g. rot13) script. I'm trying to use modulus to wrap the characters'
ordinal's around, but I seem to be getting really weird results. When I
try the operation in a python shell, it all works fine...so I think i'm
misunderstanding something. Does modulus work diffently on variables
than it does on literals?

The example script is below.

-davidc

#! /usr/bin/python

import sys

def rot(text,rotation):
  textchars = list(text)
  min_ord=32
  max_ord=126

  index=0
  for c in textchars:
    if ord(c) < min_ord or ord(c) > max_ord:
      continue
    else:
      num = ord(c) + rotation
      print '%i + %i = %i' % (ord(c), rotation, num)
      if num > max_ord:
        num = min_ord + (num % max_ord)

        # this shows really wacky modulus results
        print '%i + (%i / %i)[%i] = %i' % (min_ord, num, max_ord, num %
max_ord, num2)

      textchars[index] = chr(num)

    index += 1

  return ''.join(textchars)


if __name__ == '__main__':
  if len(sys.argv) > 1:
    if len(sys.argv) > 2:
      print rot(sys.argv[1],int(sys.argv[2]))
    else:
      print rot(sys.argv[1],13)




More information about the Tutor mailing list