Jack's Blog

流淌的心,怎能阻拦,吹来的风,又怎能阻挡。

实验二

Jacob posted @ Jul 17, 2017 10:03:45 PM in Python with tags python , 56 阅读

一. 实验目的

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'])


不建议任何人直接复制此代码

如果你是哈尔滨工业大学学生,请你一定不要复制此代码。因为此代码已被输入查重系统,一旦查重率超过20%,将会被认为抄袭。

此实验会为0分


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter