[Chicago] List revolution - errata

Massimo Di Pierro mdipierro at cs.depaul.edu
Sat Sep 10 18:40:37 CEST 2011


class List(list):
    """                                                                                                                                                                                          
    >>> a=List()                                                                                                                                                                                 
    >>> for i in range(100000): a.append(i)                                                                                                                                                      
    >>> print a.first                                                                                                                                                                            
    0                                                                                                                                                                                            
    >>> print a.second                                                                                                                                                                           
    1                                                                                                                                                                                            
    >>> print a.third                                                                                                                                                                            
    2                                                                                                                                                                                            
    >>> print a.twentieth                                                                                                                                                                        
    19                                                                                                                                                                                           
    >>> print a.twentysecond                                                                                                                                                                     
    21                                                                                                                                                                                           
    >>> print a.onehundredthirtyfifth                                                                                                                                                            
    134                                                                                                                                                                                          
    >>> print a.onethousandfivehundredthirtyeighth                                                                                                                                               
    1537                                                                                                                                                                                         
    """
    def __getattr__(self,name):
        import re
        if name.endswith('first'): name = name[:-5]+'one'
        elif name.endswith('second'): name = name[:-6]+'two'
        elif name.endswith('third'): name = name[:-5]+'three'
        elif name.endswith('fth'): name = name[:-3]+'ve'
        elif name.endswith('hth'): name = name[:-3]+'th'
        elif name.endswith('ieth'): name = name[:-4]+'y'
        elif name.endswith('th'): name = name[:-2]
        subs = [
            ("eleven","+11"),
            ("twelve","+12"),
            ("thirteen","+13"),
            ("fourteen","+14"),
            ("fiftheen","+15"),
            ("sixteen","+16"),
            ("seventeen","+17"),
            ("eighteen","+18"),
            ("nineteen","+19"),
            ("ten","+10"),
            ("twenty","+20"),
            ("thirty","+30"),
            ("fourty","+40"),
            ("fifthy","+50"),
            ("sixty","+60"),
            ("seventy","+70"),
            ("eighty","+80"),
            ("ninety","+90"),
            ("one","+1"),
            ("two","+2"),
            ("three","+3"),
            ("four","+4"),
            ("five","+5"),
            ("six","+6"),
            ("seven","+7"),
            ("eigth","+8"),
            ("nine","+9"),
            ("ten","+10"),
            ("hundred",")*100+("),
            ("thousand",")*1000+("),
            ("million",")*1000000+("),
            ("billion",")*1000000000+("),
            ("trillion",")*100000000000+("),
            ("and","")]
        for key,value in subs:
            name = name.replace(key,value)
        if '(' in name: name='('+name+')'
        name.replace('()','1')
        if not re.compile('[\d\+\*\(\)]+').match(name): return AttributeError
        try: return self[eval(name)-1]
        except: raise AttributeError



More information about the Chicago mailing list