python学习到第三天了,怎么说也该学到类和对象了吧,毕竟我java和C都学过,(虽然没学过C++但是勉强会懂),接下来还有Goland和C#要学,速度要加紧咯
第一题:三角形
这题可以不用类来做,但是毕竟是学习了类和对象,用了巩固一下下。
a = 3.0
b = 5.0
c = 4.0
class triangle:
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c#先初始化三个边长,在python里,用__init__(self,a,b,c):来初始化
#切记,如果用两个__init__(self,a,b,c):的话那么会取最后一个init函数为准,也就是说之前的
#init函数就被覆盖了,这一点等等继承的时候还会再提一遍
def Judge(self):
if self.a+self.b>self.c and self.a+self.c>self.b and self.b+self.c>self.a:#先判断能不能构成三角形
L = [self.a,self.b,self.c]
L.sort()#先把三条边从小到大排序
if L[0]*L[0] + L[1]*L[1] > L[2]*L[2]:#判断锐角三角形
print("R")
elif L[0]*L[0] + L[1]*L[1] == L[2]*L[2]:#直角三角形
print("Z")
elif L[0]*L[0] + L[1]*L[1] < L[2]*L[2]:#钝角三角形
print("D")
else:#无法构成三角形
print("W")
return ""#这边不写return ""的话会返回一个none,不清楚的把这一行注释掉就知道了
p1 = triangle(a,b,c)
print(p1.Judge())
第二题:求三棱柱
这第二题我自己想的,在第一题的基础上继承他的三角形,然后求出给出高后的这个三棱柱的体积
class V_triangle(triangle):#创建一个名为 V_triangle 的类,它将从 triangle 类继承属性和方法:
如果你只是想单纯的继承它,那么加一个pass即可
当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。
如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:比如super
这一段从Wschool摘录
a = 3.0
b = 5.0
c = 4.0
height = 6
class triangle:
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
def Judge(self):
if self.a+self.b>self.c and self.a+self.c>self.b and self.b+self.c>self.a:#先判断能不能构成三角形
L = [self.a,self.b,self.c]
L.sort()#先把三条边从小到大排序
if L[0]*L[0] + L[1]*L[1] > L[2]*L[2]:#判断锐角三角形
print("R")
elif L[0]*L[0] + L[1]*L[1] == L[2]*L[2]:#直角三角形
print("Z")
elif L[0]*L[0] + L[1]*L[1] < L[2]*L[2]:#钝角三角形
print("D")
else:#无法构成三角形
print("W")
return ""
class V_triangle(triangle):#求三棱柱面积,新建一个类继承了triangle
def __init__(self,a,b,c,height):
super().__init__(a,b,c)#这样就算继承了父类的abc,同时引入了一个height属性进入V里
#如果直接def __init__(self,a,b,c,height):的话,那么就不会继承父类,而会覆盖掉父类的init
self.height = height
def V_tri(self):
p = (a + b + c) / 2
S = (p * (p - a) * (p - b) * (p - c)) ** 0.5#**代表幂运算,如2**0.5代表根号二,这对我来说是个新用法,毕竟以前只会sqrt
return 1/3.0*S*self.height#三棱柱公式
p1 = V_triangle(a,b,c,height)
print(p1.V_tri())
简单的类和对象和继承到此为止,接下来要尝试更难的东西了