0
点赞
收藏
分享

微信扫一扫

Python学习实验报告(4)


1.1 为二次方程式ax2+bx+c=0设计一个名为Equation的类,这个类包括:

1)代表3个系数的成员变量a、b、c;

2)一个参数为a、b、c的构造方法;

3)一个名为getDiscriminant()的方法返回判别式的值;

4)两个分别名为getRoot1()和getRoot2()的方法返回方程的两个根,如果判别式为负,这些方法返回None。

#coding=utf-8
import math
class Equation:
a = 0
b = 0
c = 0
def __init__(self,a,b,c) -> None:
self.a = a
self.b = b
self.c = c

def getDiscriminant(self):
return self.b * self.b - 4 * self.a * self.c

def getRoot1(self):
if self.getDiscriminant() < 0:
return None;
else:
return (-1 * self.b + math.sqrt(self.getDiscriminant())) / (2 * self.a)

def getRoot2(self):
if self.getDiscriminant() < 0:
return None;
else:
return (-1 * self.b - math.sqrt(self.getDiscriminant())) / (2 * self.a)

obj = Equation(5,12,1)
print("第一个根为" + str(obj.getRoot1()))
print("第二个根为" + str(obj.getRoot2()))

1.2 定义代表二维坐标系上某个点的Point类(包括x、y两个属性),为该类提供一个方法用于计算两个Point之间的距离,再提供一个方法用于判断三个Point组成的三角形是钝角、锐角还是直角三角形。

#coding=utf-8
import math
class Point:
x = 0;
y = 0;
def __init__(self,x,y) -> None:
self.x = x
self.y = y

def ret_distinct(self,point1,point2):
return math.sqrt((point1.x - point2.x) ** 2 + (point1.y - point2.y) ** 2)

def adujst_quote(self,point1,point2,point3):
bian1 = self.ret_distinct(point1,point2)
bian2 = self.ret_distinct(point2,point3)
bian3 = self.ret_distinct(point1,point3)
if bian1**2 + bian2**2 == bian3 **2:
return "直角"
elif bian1**2 + bian2**2 < bian3**2:
return "锐角"
elif bian1**2 + bian2**2 > bian3**2:
return "钝角"

obj1 = Point(0,3)
obj2 = Point(4,0)
obj3 = Point(0,0)

print("点1和点2的距离为:"+str(obj1.ret_distinct(obj1,obj2)))
print("点1、点2、点3的形状为:"+str(obj1.adujst_quote(obj1,obj3,obj2)))

1.3 构建python的栈结构。

需求:

1、用列表作为栈的存储容器,实现栈的压栈和出栈操作

2、栈可以表示自己的大小和当前存储了多少元素

3、判断栈是否空栈,判断栈是否满栈

4、显示栈有多少个元素,还有多少个存储空间

5、将栈置为空栈

分析:

需要创建栈Stack类,包含:

属性:一个空列表list

栈的最大长度max_length

方法:进栈 push 出栈 pop

判空 isEmpty 判满 isFull

元素个数 count 剩余空间leftspace

清空栈 clean

#coding=utf-8
class Stack:
_list = []
max_length = 0;

def __init__(self,max_length):
self.max_length = max_length

def push(self,data):
if self.isFull() == False:
self._list.append(data)
return True
else:
return False

def pop(self):
if(self.isEmpty() == False):
temp_data = self._list[self.count()-1]
self._list.remove(self._list[len(self._list)-1])
return temp_data
else:
return None

def isEmpty(self):
if len(self._list) == 0:
return True;
else:
return False

def isFull(self):
if len(self._list) == self.max_length:
return True
else:
return False

def count(self):
return len(self._list)

def leftspace(self):
return self.max_length - len(self._list)

def clean(self):
self._list.clear()


obj_stack = Stack(10)
if(obj_stack.isEmpty() == True):
print("当前栈为空")
else:
print("当前栈非空")
if obj_stack.push('a') == True:
print("插入成功")
else:
print("插入失败")
if obj_stack.push('b') == True:
print("插入成功")
else:
print("插入失败")

print("弹出栈内容:"+str(obj_stack.pop()))
if(obj_stack.isEmpty() == True):
print("当前栈为空")
else:
print("当前栈非空")
print("栈的剩余空间为:"+str(obj_stack.leftspace()))
print("栈内元素个数:"+str(obj_stack.count()))
obj_stack.clean()
if(obj_stack.isEmpty() == True):
print("当前栈为空")
else:
print("当前栈非空")
print("栈的剩余空间为:"+str(obj_stack.leftspace()))
print("栈内元素个数:"+str(obj_stack.count()))

1.4 Python中,各种运算符也属于特殊方法,设计MyList类,实现列表中每个元素加、减、乘、除运算,实现返回列表长度方法,实现输出列表方法。

分析:

MyList类含有实例属性空列表

实现魔术方法 _ _ add_ ​(),​ _ sub_ ​(),​ _ mul_ ​(),​ _ truediv_ ​(),​ _ len_ ​(),​ _ repr_ ​(),​ _ str_ _()

class MyList:
temp_list = []
def __init__(self,temp_list):
self.temp_list = temp_list

def __add__(self):
sum = 0;
for item in self.temp_list:
sum = sum + int(item)
return sum

def __sub__(self):
sum = self.temp_list[0];
for item in self.temp_list[1:]:
sum = sum - int(item)
return sum

def __mul__(self):
sum = self.temp_list[0];
for item in self.temp_list[1:]:
sum = sum * int(item)
return sum

def __truediv__(self):
sum = self.temp_list[0];
for item in self.temp_list[1:]:
sum = sum + int(item)
return sum

def __len__(self):
return len(self.temp_list)

def __repr__(self):
print(self.temp_list)

def __str__(self):
strmsg = ""
for item in self.temp_list:
strmsg = strmsg + str(item)
print(strmsg)

1.5 调试完成以下课程管理系统代码

class Course:

def ​init​(self,id):

self._id = id

self._coursename = 0

@property

def id(self):

return self._id

@property

def coursename(self):

return self._coursename

@id.setter

def id(self,id):

self._id=id

@

def coursename(self,coursename)

self.coursename=coursename

class CourseManager:

courselist = [(1, ‘Linux’), (2, ‘C++’), (3, ‘HTML’), (4, ‘HTML5’), (5, ‘NodeJS’), (6, ‘Shell’), (7, ‘Python’)]

def courseNum(self):

print len(CourseManager.courselist)

def add(self,Course):

CourseManager.courselist.append((Course.id,Course.coursename))

def delete(self):

CourseManager.courselist.pop()

def deleteId(self,id):

CourseManager.courselist.pop(id-1)

def deleteName(self,name):

for course in CourseManager.courselist:

if course[1]==name:

CourseManager.courselist.pop(course[0]-1)

def printCourse(self):

print CourseManager.courselist

def printCoursebyId(self,id):

print CourseManager.courselist[id-1]

def printCoursebyName(self,name):

for course in CourseManager.courselist:

if course[1]==name:

CourseManager.courselist[course[0]-1]

while True:

print u"请输入命令,需要帮助请输入 0"

cmd = raw_input("Your command is :")
if cmd == '0':
print u"输入0,打印出程序帮助信息,即每个操作命令的介绍"
print u"输入1,打印出程序中存储的所有课程ID及课程名称"
print u"输入2,打印出课程数量"
print u"输入3,打印出最长的课程名称与其ID"
print u"输入4,删除最后一个课程并打印出剩余课程数量"
print u"输入5,退出程序"

if cmd == '1':
key_list = course.keys()
for item in key_list:
print u'编号【%d】 课程【%s】' %(item,course[item])

if cmd == '2':
print u'一共有%d门课' %len(course)

if cmd == '3':
d = {}
for item in course.values():
d[item] = len(item)
#这句话不是太理解
dlist = sorted(d.items(),key=lambda t:t[1])
print u'最长的课程是'
for l in dlist:
if l[1] == dlist[-1][1]:
print l[0]


if cmd == '4':
if len(course)!=0:
course.pop(max(course.keys()))
print u'剩余有%d门课' %len(course)
else:
print u'目前没有课程了'


if cmd == '5':
print u'感谢使用'
break

print 15*'-'
#coding=utf-8
class Course:
def __init__(self,id):
self._id = id
self._coursename = 0

@property
def id(self):
return self._id
@property
def coursename(self):
return self._coursename
@id.setter
def id(self,id):
self._id=id


def coursename(self,coursename):
self.coursename=coursename

class CourseManager:
courselist = [(1, 'Linux'), (2, 'C++'), (3, 'HTML'), (4, 'HTML5'), (5, 'NodeJS'), (6, 'Shell'), (7, 'Python')]
def courseNum(self):
print len(CourseManager.courselist)
def add(self,Course):
CourseManager.courselist.append((Course.id,Course.coursename))
def delete(self):
CourseManager.courselist.pop()
def deleteId(self,id):
CourseManager.courselist.pop(id-1)
def deleteName(self,name):
for course in CourseManager.courselist:
if course[1]==name:
CourseManager.courselist.pop(course[0]-1)
def printCourse(self):
print CourseManager.courselist
def printCoursebyId(self,id):
print CourseManager.courselist[id-1]
def printCoursebyName(self,name):
for course in CourseManager.courselist:
if course[1]==name:
CourseManager.courselist[course[0]-1]

while True:
print u"请输入命令,需要帮助请输入 0"

cmd = raw_input("Your command is :")
if cmd == '0':
print u"输入0,打印出程序帮助信息,即每个操作命令的介绍"
print u"输入1,打印出程序中存储的所有课程ID及课程名称"
print u"输入2,打印出课程数量"
print u"输入3,打印出最长的课程名称与其ID"
print u"输入4,删除最后一个课程并打印出剩余课程数量"
print u"输入5,退出程序"

if cmd == '1':
key_list = course.keys()
for item in key_list:
print u'编号【%d】 课程【%s】' %(item,course[item])

if cmd == '2':
print u'一共有%d门课' %len(course)

if cmd == '3':
d = {}
for item in course.values():
d[item] = len(item)
#这句话不是太理解
dlist = sorted(d.items(),key=lambda t:t[1])
print u'最长的课程是'
for l in dlist:
if l[1] == dlist[-1][1]:
print l[0]


if cmd == '4':
if len(course)!=0:
course.pop(max(course.keys()))
print u'剩余有%d门课' %len(course)
else:
print u'目前没有课程了'


if cmd == '5':
print u'感谢使用'
break

print 15*'-'

2、思考题

2.1 结合实验题1.5用面向对象思想实现学生管理系统。

#coding=utf-8
class Course:
def __init__(self,id):
self._id = id
self._coursename = 0

@property
def id(self):
return self._id
@property
def coursename(self):
return self._coursename
@id.setter
def id(self,id):
self._id=id


def coursename(self,coursename):
self.coursename=coursename

class CourseManager:
courselist = [(1, 'Linux'), (2, 'C++'), (3, 'HTML'), (4, 'HTML5'), (5, 'NodeJS'), (6, 'Shell'), (7, 'Python')]
def courseNum(self):
print len(CourseManager.courselist)
def add(self,Course):
CourseManager.courselist.append((Course.id,Course.coursename))
def delete(self):
CourseManager.courselist.pop()
def deleteId(self,id):
CourseManager.courselist.pop(id-1)
def deleteName(self,name):
for course in CourseManager.courselist:
if course[1]==name:
CourseManager.courselist.pop(course[0]-1)
def printCourse(self):
print CourseManager.courselist
def printCoursebyId(self,id):
print CourseManager.courselist[id-1]
def printCoursebyName(self,name):
for course in CourseManager.courselist:
if course[1]==name:
CourseManager.courselist[course[0]-1]

while True:
print u"请输入命令,需要帮助请输入 0"

cmd = raw_input("Your command is :")
if cmd == '0':
print u"输入0,打印出程序帮助信息,即每个操作命令的介绍"
print u"输入1,打印出程序中存储的所有课程ID及课程名称"
print u"输入2,打印出课程数量"
print u"输入3,打印出最长的课程名称与其ID"
print u"输入4,删除最后一个课程并打印出剩余课程数量"
print u"输入5,退出程序"

if cmd == '1':
key_list = course.keys()
for item in key_list:
print u'编号【%d】 课程【%s】' %(item,course[item])

if cmd == '2':
print u'一共有%d门课' %len(course)

if cmd == '3':
d = {}
for item in course.values():
d[item] = len(item)
#这句话不是太理解
dlist = sorted(d.items(),key=lambda t:t[1])
print u'最长的课程是'
for l in dlist:
if l[1] == dlist[-1][1]:
print l[0]


if cmd == '4':
if len(course)!=0:
course.pop(max(course.keys()))
print u'剩余有%d门课' %len(course)
else:
print u'目前没有课程了'


if cmd == '5':
print u'感谢使用'
break

print 15*'-'

2.2 写一个网页数据操作类,完成下面的功能。

提示:需要用到urllib模块

1、get_httpcode()获取网页到状态码,返回类似404、200、301等int

2、get_htmlcontent()获取网页到内容,返回类型 str

3、get_linknum()计算网页等链接数目。

#coding=utf-8
import requests as urllib
class web_options:
url = "https://www.baidu.com"

def __init__(self,url):
self.url = url

def get_httpcode(self):
return urllib.get(url=self.url).status_code

def get_htmlcontent(self):
return urllib.get(url=self.url).text

def get_linknum(self):
return len(urllib.get(url=self.url).text.split('<a'))


obj = web_options("https://www.baidu.com")
print("网站状态:"+str(obj.get_httpcode()))
print("网站链接数:"+str(obj.get_linknum()))

urllib个人觉得没requests好用,所以还是用requests比较香 == 但是要求用urllib,就偷鸡用as做别名了。



举报

相关推荐

0 条评论