[Tutor] Modulus wierdness?

Kent Johnson kent37 at tds.net
Tue Nov 16 02:27:18 CET 2004


You are re-assigning num, then trying to use its original value again in 
the print. Try this:
         num2 = 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)
         num = num2


David Clymer wrote:
> 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)
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


More information about the Tutor mailing list