Hello all,
I ported to python a little Perl script that applies some math algorithm that I do not understand... My version seems to give the same results as the Perl version... but just to make sure I am asking the following:
The Perl version starts by testing whether Perl is in integer mode or not, and if not it exists! Is there an equivalent module in Python?
From what I gathered, in Integer mode, Perl convert (floors) all numbers to
integers while doing any arithmetic (+ - * / bit shifting...)
Should I simply wrap every number involved in any arithmetic calculation with calls to floor()?
My python script, and the Perl original, follow. What it does is create a hash of the input string (which is supposed to be a DNS domain name) and returns the two layer directory tree where the domain should live in my filesystem :
site.company.com --> X3/32/site.company.com site2.company.com --> 6U/zv/site2.company.com
Given the lack of "use integer" from my code... can anyone tell these two programs are equivalent?
def complex(domain): h=0 res="" domain=domain.lower() prefix=['x','x','/','x','x','/'] conv=[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_' ]
for i in range(0,len(domain)):
h*=129
h+=ord(domain[i])
h+=987654321
if h == 0:
h=1
prefix[0] = conv[ h & 0x3f ]; h = h >> 6
prefix[1] = conv[ h & 0x3f ]; h = h >> 6
prefix[3] = conv[ h & 0x3f ]; h = h >> 6
prefix[4] = conv[ h & 0x3f ];
return "".join(prefix) + domain
print complex(sys.argv[1])""" The Perl version : # ---------------------------------------------------------- # Returns the complex hash of the website.
sub complex {my $site = shift; my $h = 0; my $res = "";
$site = lc $site;
my @prefix = ( 'x','x','/','x','x','/' );
my @conv = (
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'-', '_'
);my @chars = split //, $site;
my $i;
for( $i = 0; $i < $#chars + 1; $i++ ) {
$h *= 129;
$h += ord( $chars[$i] );
$h += 987654321;
}
if( $h == 0 ) { $h = 1; }$prefix[0] = $conv[$h & 0x3f]; $h = $h >> 6; $prefix[1] = $conv[$h & 0x3f]; $h = $h >> 6; $prefix[3] = $conv[$h & 0x3f]; $h = $h >> 6; $prefix[4] = $conv[$h & 0x3f];
return (join '', @prefix) . "$site"; } """
_______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor
