一. 实验目的
1. 掌握自定义类的创建和使用等操作
2. 掌握 matplotlib 模块的使用
二. 实验内容
文件UN.txt中存放193个联合国成员信息,每行包括一个国家的名称、所在大洲、人口(百万)和面积(平方英里),例如:
Canada,North America,34.8,3855000
France,Europe,66.3,211209
New Zealand,Australia/Oceania,4.4,103738
Nigeria,Africa,177.2,356669
Pakistan,Asia,196.2,310403
Peru,South America,30.1,496226
(a) 创建一个Nation类包括四个实例变量存储国家信息和一个名为pop_density方法计算一个国家的人口密度。用这个类编写一个程序包含193个词条的字典。每个词条形式如下:
name of a country: Nation object for that country
用文件UN.txt创建这个字典,将这个字典保存到一个名为nationsDict.dat的永久二进制文件中,同时将Nation类保存到nation.py文件中。
(b) 利用nationsDict.dat和nation.py文件编写一个程序(search.py),输入联合国成员国名字,显示这个国家所有信息。如:
Enter a country: Canada
Continent: North America
Population: 34,800,000
Area: 3,855,000.00 square miles
(c) 利用nationsDict.dat和nation.py文件编写一个程序(sort.py),输入一个大洲的名字,按照降序使用 matplotlib 的柱状图功能画出该大洲人口密度前10名的联合国成员国名字及对应的人口密度。
将文件 nationsDict.dat,nation.py,search.py,sort.py 打包上传,压缩文件命名为:学号_姓名_实验2
nation.py
import pickle
class nation:
def __init__(self, name='', continent='', pop='', area='', pop_density=''):
self._name = name
self._continent = continent
self._pop = pop
self._area = area
self._pop_density =pop_density
def setName(self, name):
self._name = name
def setContinent(self, continent):
self._continent = continent
def setPop(self, pop):
self._pop = pop
def setArea(self, area):
self._area = area
def getName(self, name):
return self._name
def getContinent(self, continent):
return self._continent
def getPop(self, pop):
return self._pop
def getArea(self, area):
return self._area
def pop_density(self):
return (self._pop / self._area)
def __str__(self):
return ("The poplation density of" + str(self._name) + "is" + str(self.pop_density()))
f = open('UN.txt')
dict = {}
for line in f:
words = line.split(",")
_nation=nation(continent='', pop='', area='', pop_density='')
_nation.setName(words[0])
_nation.setContinent(words[1])
_nation.setPop(words[2])
_nation.setArea(words[3])
dict[words[0]] = _nation
outfile = open("nationsDict.dat",'wb')
pickle.dump(dict,outfile)
outfile.close()
search.py
import pickle
import nation
def getDictionary(fileName):
infile = open(fileName, 'rb')
nations =pickle.load(infile)
infile.close()
return nations
def inputNameOfNation(nations):
nation = input("Input a name of a UN member nation: ")
while nation not in nations:
print("Not a member of the UN.Please try again.")
nation = input("Input a name of a UN member nation: ")
def displayData(nations,nation):
print("Continent:", nations[nation]['continent'])
print("Populaton:",nations[nation]['pop'], "million people")
print("Area:",nations[nation]['area'],"square miles")
nations = getDictionary("nationsDict.dat")
nation = inputNameOfNation(nations)
displayData(nations,nation)
sort.py
import matplotlib.pyplot as plt
import nation
import pickle
def getDictionary(fileName):
infile = open(fileName, 'rb')
nations =pickle.load(infile)
infile.close()
return nations
nations = getDictionary("nationsDict.dict")
for i in nations[i]:
nation.pop_density()
nation.pop_density.sort
plt.bar(data['x'], data['y'])
不建议任何人直接复制此代码
| 六月 | ||||||
|---|---|---|---|---|---|---|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
| 31 | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 1 | 2 | 3 | 4 |