#python作业题 1.输入三个坐标表示三角形的三个顶点,计算三角形的面积
代码语言:javascript复制import math
(x1, y1), (x2, y2), (x3, y3) = eval(input('(x1,y1),(x2,y2),(x3,y3):'))
#如果不在一条直线上就构成了三角形
if (x1 - x2) * (y1 - y2) == (x2 - x3) * (y2 - y3):
print('三点在同一条直线上!')
else:
a = float(math.sqrt((x1 - x2) ** 2 (y1 - y2) ** 2))
b = float(math.sqrt((x2 - x3) ** 2 (y2 - y3) ** 2))
c = float(math.sqrt((x1 - x3) ** 2 (y1 - y3) ** 2))
q=float((a b c)/2)
print("该三角形的三边分别为:", a, b, c)
s= float(math.sqrt((q * (q - a) * (q - b) * (q - c))))
print("该三角形的面积:", s)
计算一边进行赋值的时候要带上数据类型,python的平均值math.sqrt()
2.创建一个学生类,有姓名年龄基础属性,创建一个成绩列表,里面装入语文数学英语数学成绩,并将其实例化
代码语言:javascript复制class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def get_name(self):
return self.name
def get_age(self):
return int(self.age)
def get_course(self):
a = list(self.score.values())
return max(a)
student_01 = Student("zhangming", 20, {'语文': 69, '数学': 88, '英语': 100})
print(student_01.get_name())
print(student_01.get_age())
print(student_01.get_course())
values() :返回列表或字典中的值
创建三个属性,在函数的返回值中,return相当于输出值,在成绩列表里面,可以直接将a作为变量把列表厘米的值赋给a返回(输出)最大的值
3.列表十个数字,逆序输出
代码语言:javascript复制list1 = list(input(" 请输入10个数 : " ))
print(list1)
list1.sort(reverse=Tru1e)
print(list1)
列表,元组,字典也是一种数据类型,输入的方式一样,主要在于是否记住列表逆序输出的函数
4.对元组进行去重
代码语言:javascript复制a = [4, 16, 4, 10, 5, 20, 12, 3, 14, 14, 17, 15, 1, 20, 15, 11, 6, 17, 6, 12, 11, 18, 10, 7, 8, 13, 15, 10, 19, 16, 1,
17, 15, 17, 9, 20, 8, 4, 14, 14, 12, 15, 8, 7, 6, 5, 11, **, *, **, **, *4, 9, 15, 15, 9, 11, 5, 16, 9, 1, 13, 6,
12, 10, 3, 15, 15, **, *, *, **, **, 5, 14, 5, 4, 16, 14, 17, 9, 1, 10, 6, 7, 6, 20, 3, 3, 13, 15, 20, 6, 1, 7, 4,
15, 1, 20, 4]
print(a)
print("去重...")
b = []
for i in a:
if i not in b:
b.append(i)
print(b)
进行去重操作的时候,可以新建一个元组,然后遍历所有的原元组 ,进行判断,如果元素不在新的元组中就·进行增添append()进新建的函数中
5.输出全部的水仙花数
代码语言:javascript复制num=int(input("请输入一个三位数:"))
bw=int(num/100)
gw=int(num0/10)
sw=int(num0)
total=bw**3 gw**3 sw**3
if total==num:
print(str(num) "是水仙花数")
else:
print(str(num) "不是水仙花数")
print("水仙花数有:")
for i in range(100,1000):
a=int(i/100)
b=int(i0/10)
c=int(i0)
if i==a**3 b**3 c**3:
print(i)
i=i 1
input("请按回车键退出")
通过做题,发现很大的问题在于,赋值时候没有标清数据类型导致后续无法进行下去
面向对象复习
一、面向过程与面向对象
面向过程:根据业务逻辑从上到下写代码。
面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能够更快速的开发程序,减少了重复代码。
面向过程是以一种线性思维方式的定向编程(实际)面向对象是线性思维方式无法解决的复杂过程的编程(抽象)
面向对象编程
面向对象最大的特点就是,封装,创建一个类,构造类的属性,选择属性的方法进行实例方法,静态方法,类方法
二、类和对象
类
类是对一群具有相同 特征 或者 行为 的事物的一个统称,是抽象的,不能直接使用。
- 特征其实就是一个变量,在类里我们称之为属性。- 行为其实就是一个函数,在类里我们称之为方法。- 类其实就是由 属性 和 方法 组成的一个抽象概念。- 当然在类外,叫做函数,实际上类外的函数若对于类进行操作,就是类的实例化——对象- python中一切皆为对象
对象(实例)
对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。在开发中,应该先有类,在类里定义好属性和行为,再根据类来创建对象。
应该先有类,在类里定义好属性和行为,再根据类来创建对象。
对象无处不在类中也有实例化
类和对象的关系
- 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。- 使用同一个类,能够创建出很多对象。- 类中定义了什么属性和方法,对象中就有什么属性和方法。- 不同对象对应的属性值也会不同。- 在创建对象的时候,实例对象开辟的内存空间中含有类指针指向类的内存空间,每一个属性可以一一对应,指向(引用)这个操作用 .
self
self 表示当前对象,在类中的当前实例化
- self并不是一个关键字,其实可以是任意的标识符,为了表达代表的是当前对象自己,习惯用self 2. 调用实例函数的时候,self不需要手动传参,系统会自动传递当前的对象 3. 哪个对象调用了方法,方法里的self指的就是谁。 通过 self.属性名 可以访问到这个对象的属性。 通过 self.方法名() 可以调用这个对象的方法
三、类的定义
代码语言:javascript复制class 类名():
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
四、类中的成员
类中的成员——类属性
访问类属性(对象)
方式一:通过 类名.类属性
访问
方式二:通过 实例对象.类属性
访问
class Person(object):
# 类属性
num = 10
p = Person()
# 方式一
print(Person.num)
# 方式二
print(p.num)
属性的创建(类中的实例化)
实例函数(对象函数,成员函数)
代码语言:javascript复制class Person():
def eat(self, food):
print("eating" food)
self——当前对象类中实例化必须存在
实例化存在与类中和类外,对象也存在于类中和类外(内是参数作为对象实例化,外是对象实例化)
对象实例化
在类外对象的实例化那么我们首先需要创建一个对象
代码语言:javascript复制p1=类名
实例化访问( . 访问,指向)
代码语言:javascript复制class Person(object):
def eat(self, food): # 实例方法有一个参数self,指的是实例对象(当前对象)
print(food)
p1 = Person()
# 方式一
p1.eat('蘸水面')
#对象.属性(‘ ’)
# 方式二
Person.eat(p1, '蘸水面')
#对象.属性(对象,‘’)
init:当实例创建完毕之后被调用的,然后通过__init__给实例设置初始值
代码语言:javascript复制def __init__(self, name, age, hobby):
self.name = name
self.age = age
self.hobby = hobby
self.score = 60
#用_init_创建参数
具体操作
代码语言:javascript复制class Area():
def __init__(self,r):
self.r=r
def C(self):
c= 2 * 3.14 * self.r
print("圆形的周长为%.2f"%c)
def S(self):
s=3.14*self.r*self.r
print("圆形的面积为%.2f"%s)
class San(Area):
def __init__(self,a,b,c):
self.a=a
self.b=b
self.c=c
def C(self):
if (self.a self.b) <= self.c or (self.a self.c) <= self.b or (self.c self.b) <= self.a:
print("这三组数据不能构成三角形,请重新输入三组数据")
return
C=self.a self.b self.c
print("三角形的周长为%.2f"%C)
def S(self):
if (self.a self.b) <= self.c or (self.a self.c) <= self.b or (self.c self.b) <= self.a:
print("这三组数据不能构成三角形,请重新输入三组数据")
return
p = (self.a self.b self.c) / 2.0
h = p * (p - self.a) * (p - self.c) * (p - self.b)
s = sqrt(h)
print("三角形的面积为%.2f"%s)
class Ju(Area):
def __init__(self,a,b):
self.a=a
self.b=b
def C(self):
c=self.a self.b
print("矩形的周长为%.2f"%c)
def S(self):
s=self.a*self.b
print("举行的面积为%.2f"%s)
sanjiaoxing=San(1,4,5)
sanjiaoxing.C()
sanjiaoxing.S()
juxing=Ju(1,2)
juxing.S()
juxing.C()
yuanxing=Area(3)
yuanxing.S()
yuanxing.C()
用_init_可以在对象访问的时候直接输入数值,直接访问属性