Entry 958

Will's make_path function

   

Submitted by S.Lott on Aug. 25, 2008 at 3:02 p.m.
Language: Python. Code size: 1.8 KB.

#!/usr/bin/env python
"""http://www.willmcgugan.com/2008/08/25/a-python-challenge-better-than-rentacoder/"""
import os.path

def make_path( n ):
    """Transform file number n into a sequence of numbers in the range 0..99.
    Then transform the sequence of numbers into a file path.
    """
    base100 = []
    while n >= 100:
        p = n % 100
        n = n // 100
        base100.append( p )
    if n > 0: base100.append( n )
    elif len(base100) == 0: base100.append( n )
    base100.reverse()
    return os.path.join( *[ "f%02d" % d for d in base100 ] )
    
def test():
    import unittest
    class TestMakePath( unittest.TestCase ):
        def test_0( self ):
            self.assertEquals( "f00",  make_path( 0 ) )
            self.assertEquals( "f01",  make_path( 1 ) )
            self.assertEquals( "f98",  make_path( 98 ) )
            self.assertEquals( "f99",  make_path( 99 ) )
        def test_1( self ):
            self.assertEquals( "f01/f00", make_path( 100 ) )
            self.assertEquals( "f01/f01", make_path( 101 ) )
            self.assertEquals( "f01/f98", make_path( 198 ) )
            self.assertEquals( "f01/f99", make_path( 199 ) )
        def test_2( self ):
            self.assertEquals( "f02/f00", make_path( 200 ) )
            self.assertEquals( "f02/f01", make_path( 201 ) )
            self.assertEquals( "f02/f98", make_path( 298 ) )
            self.assertEquals( "f02/f99", make_path( 299 ) )
        def test_10( self ):
            self.assertEquals( "f99/f98", make_path( 9998 ) )
            self.assertEquals( "f99/f99", make_path( 9999 ) )
            self.assertEquals( "f01/f00/f00", make_path( 10000 ) )
            self.assertEquals( "f01/f00/f01", make_path( 10001 ) )
            
    suite= unittest.makeSuite(TestMakePath)
    runner= unittest.TextTestRunner()
    runner.run(suite)

if __name__ == "__main__":
    test()

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).