- 什么是面向对象?
答: “面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象,(万物皆对象)。”
- 类和对象的关系是什么
答:“它们的关系是,对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法;类的构造方法 。”
- 设计一个桌子类,长度宽度和高度 (类和对象)
class Desk():
lenth = input('请输入您预计购买桌子得长度:(单位:cm)') #输入想要的桌子长度
wide = input('请输入您预计购买桌子得宽度:(单位:cm)') #输入想要的桌子宽度
def __init__(self):
print('您购买的桌子规格如下:')
desk = Desk()
print(f'您购买的桌子长度为:{desk.lenth}cm\n您购买的桌子宽度为:{desk.wide}cm')
- 定义一个账户类,可以创建账户、存款、取款、查询余额、以及注销账户操作( 三大特性 )
class Account:
# 初始化方法
def __init__(self, name, pwd, money=0):
self.name = name
self.pwd = pwd
self.money = money
# 存款
def deposit(self, pwd, money):
if pwd == self.pwd:
if isinstance(money, (int, float)) and money >= 0:
self.money += money
print("您已成功存款%.2f元,卡上余额为%.2f" % (money, self.money))
else:
print('对不起,请输入正确的金额')
else:
print('对不起,您的密码输入错误')
# 取款
def withdraw(self, pwd, money):
if pwd == self.pwd:
if isinstance(money, (int, float)) and money >= 0:
if self.money >= money:
self.money -= money # self.money = self.money - money
print("您已成功取款%.2f元,卡上余额为%.2f" % (money, self.money))
else:
print('对不起,您的卡上余额已不足,请输入正确的金额')
else:
print('对不起,请输入正确的金额')
else:
print('对不起,您的密码输入错误')
# 查询余额
def query(self, pwd):
if pwd == self.pwd:
print('卡上的余额为%.2f元' % self.money)
else:
print('对不起,您的密码输入错误')
# 注销账户
def close(self, pwd):
if pwd == self.pwd:
if self.money == 0:
self.name = ''
self.money = 0
self.pwd = ''
li.remove(user1)
else:
print('卡上尚有余额,请先取出')
else:
print('对不起,您的密码输入错误')
# 登录之后需要调用的函数
def func():
while True:
num2 = int(input('1.存款 2.取款 3.查询余额 4.注销账户 5.退出 \t请输入您的选择'))
if num2 == 1:
pwd3 = input('请输入密码:')
while pwd3 != pwd1:
print('密码输入错误')
pwd3 = input('请输入密码:')
else:
money = eval(input('请输入金额:'))
a.deposit(pwd3, money)
elif num2 == 2:
pwd3 = input('请输入密码:')
while pwd3 != pwd1:
print('密码输入错误')
pwd3 = input('请输入密码:')
else:
money = eval(input('请输入金额:'))
a.withdraw(pwd3, money) # 对象名.实例方法()
elif num2 == 3:
pwd3 = input('请输入密码:')
while pwd3 != pwd1:
print('密码输入错误')
pwd3 = input('请输入密码:')
else:
a.query(pwd3)
elif num2 == 4:
pwd3 = input('请输入密码:')
while pwd3 != pwd1:
print('密码输入错误')
pwd3 = input('请输入密码:')
else:
a.close(pwd3)
break
elif num2 == 5:
print('退出成功')
break
else:
print('输入错误')
li = []
while 1:
print('=====欢迎来星月模拟银行======')
num = int(input('1.注册账户\n2.登录\n3.退出 \n 请输入您的选择'))
if num == 1:
user = input('请输入用户名:')
pwd1 = input('请输入密码:')
pwd2 = input('请再次输入密码:')
if pwd1 == pwd2:
li.append(user)
# 创建实例对象
a = Account(user, pwd1)
print("恭喜你注册成功")
else:
print('对不起,您输入的两次密码不一致')
user = input('请输入用户名:')
pwd1 = input('请输入密码:')
pwd2 = input('请再次输入密码:')
elif num == 2:
user1 = input('请输入用户名:')
pwd3 = input('请输入密码:')
if user1 in li:
if pwd3 == pwd1:
func()
else:
print('对不起,您的密码输入错误')
else:
print('对不起,该用户未注册')
elif num == 3:
print('退出成功')
break
else:
print('请输入正确的选项:')
-
测试列表推导式和不用列表推导式哪一种速度更快( 异常和协议 )
import time
class Runtime:
# 只要with语句一出现,enter方法就会被触发
# 拟定上下文协议,固定使用with开始做什么事情,需要有返回值
def __enter__(self):
self.start_time = time.time() # time.time() 得到当前时间戳
return self.start_time
# 当enter方法执行完毕就会执行exit方法
'''
exc_type:异常类型
exc_val:异常值
exc_tb: 追踪信息
只有当enter方法或者with下的代码出现异常,才会有值,否则都为None
'''
def __exit__(self, exc_type, exc_val, exc_tb):
self.end_time = time.time()
self.run_time = self.end_time - self.start_time
print(f'运行时间为:{self.run_time}')
# with Runtime():
# li = [i for i in range(100000)]
#
# with Runtime():
# li1 = []
# for i in range(100000):
# li1.append(i)
-
range不可以使用小数做步长,实现一个可迭代对象可以实现小数步长( 异常和协议 )
import decimal
class Float_range:
def __init__(self, start, end=None, step=1):
# 如果开始值不属于int或者float类型,就抛出类型错误
if not isinstance(start, (int, float)):
raise TypeError # 主动抛出异动
# 如果end有值,并且不属于int或者float类型,就抛出类型错误
elif end != None and not isinstance(end, (int, float)):
raise TypeError
# 如果step不属于int或者float,就抛出类型错误
elif not isinstance(step, (int, float)):
raise TypeError
elif end and end < start:
print('结束值不能小于开始值')
elif step <= 0:
print('步长不能小于等于0')
# 其它都是正常的情况
else:
# 如果传入一个参数值
if end == None:
self.start = 0
self.end = start
self.step = step
# 如果传入两个数值或者三个参数值
else:
self.start = 0
self.end = end
self.step = step
def __iter__(self):
return self
def __next__(self):
# self.index = self.start
if self.start >= self.end:
raise StopIteration
self.start = decimal.Decimal(str(self.start)) + decimal.Decimal(str(self.step))
return self.start
#
# for i in Float_range(1,10,1.2):
# print(i)
# print(1.1+0.1)
# print(decimal.Decimal('1.1') + decimal.Decimal('0.1'))
注意点:这里把step改成2.1时会出现多个小数 原因是 : python计算机中数据以0和1存储,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。而print函数也会舍去精度范围外的尾数(也不精确)
-
打开一个只读文件,如果文件不存在,则去创建这个文件,通过异常去完成( 异常和协议 )
try:
file_name = input('请输入您需要打开的文件名字:')
T = open(file_name,'r+',encoding='utf-8')
print('您打开的文件如下:')
for i in T:
print(i)
except IOError:
new_T = open(f'{file_name}','w')
finally:
file_name.close()
print('我已经执行完毕了')
(在此特别感谢我们的阿言进行优化)
欢迎我们:
吐纳樱唇,氛氲兰气,玉纤握处堪怜
云想衣裳花想容,春风拂槛露华浓
众里嫣然通一顾,人间颜色如尘土
垆边人似月,皓腕凝霜雪
柳怯云松,更何必、十分梳洗
手如柔荑,肤如凝脂。领如蝤蛴,齿如瓠犀
瓠犀发皓齿,双蛾颦翠眉。红脸如开莲,素肤若凝脂
一顾倾人城,再顾倾人国的阿言 |
- 复习