# [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

```