50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
FILENAME = 'metro_areas.txt'
|
|
|
|
class MetroArea:
|
|
|
|
def __init__(self, name, country, pop, pop_change, area):
|
|
self.name = name
|
|
self.country = country
|
|
self.pop = pop
|
|
self.pop_change = pop_change
|
|
self.area = area
|
|
|
|
def __repr__(self):
|
|
return '{0.name}, {0.country} ({0.pop})'.format(self)
|
|
|
|
def density(self):
|
|
return self.pop / self.area
|
|
|
|
|
|
def load():
|
|
metro_areas = []
|
|
with open(FILENAME, encoding='utf-8') as text:
|
|
for line in text:
|
|
if line.startswith('#'):
|
|
continue
|
|
# Country Name Rank Population Yr_change % Area(km2) Pop/km2
|
|
country, name, _, pop, pop_change, _, area, _ = line.split('\t')
|
|
pop = float(pop.replace(',', ''))
|
|
pop_change = float(pop_change)
|
|
area = float(area)
|
|
metro_areas.append((name, country, pop, pop_change, area))
|
|
return metro_areas
|
|
|
|
|
|
def list(metro_areas):
|
|
print('{:^18} {:>6} {:>4} {:>6}'.format('name', 'cc', 'pop', 'chg', 'area'))
|
|
for metro in metro_areas:
|
|
print('{:18} {:2} {:6.0f} {:4.0f} {:6.0f}'.format(*metro))
|
|
|
|
def list_instances(metro_areas):
|
|
metro_areas = [MetroArea(*fields) for fields in metro_areas]
|
|
for metro in metro_areas:
|
|
print(metro)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
#list(load())
|
|
list_instances(load())
|
|
|
|
|