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做别名了。