文章目录
- 一、面向对象相关习题
- 1. 小明爱跑步
- 2. 计算面积安置家具
- 3. 许三多开炮
- 二、函数相关练习(复习)
- 1. 名片管理系统
- 2. 根据范围求能被3和7整除的数
一、面向对象相关习题
1. 小明爱跑步
题目要求:小明的体重为120KG,小明每跑一次步体重下降0.5KG,小明每吃一顿饭体重上升1KG。
类的设计如下所示:
class Person:
def __init__(self, name, weight):
self.name = name
self.weight = weight
def __str__(self):
return "[%s]的当前体重是 %.1f KG " % (self.name, self.weight)
def running(self):
print("跑了一次步 !")
self.weight = self.weight - 0.5
def eatting(self):
print("吃了一次饭 !")
self.weight = self.weight + 1
p = Person('小明', 120)
print(p)
p.running()
p.running()
print(p)
p.eatting()
print(p)
2. 计算面积安置家具
具体要求:房子(House) 有 户型、总面积 和 家具名称列表。初始时的新房子没有任何的家具。家具(HouseItem) 有 名字 和 占地面积,其中席梦思(bed) 占地 4 平米、衣柜(chest) 占地 2 平米、餐桌(table) 占地 19.5 平米,将以上三件 家具 添加 到 房子 中。打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表。
类的设计如下所示:
# 家具类
class HouseItem:
def __init__(self, Item_name, Item_area):
self.Item_name = Item_name # 家具名称
self.Item_area = Item_area # 家具占地面积
def __str__(self):
return "[%s] 占地 %.2f 平米" % (self.Item_name, self.Item_area) # 返回家具名称以及该家具的占地面积
# 房子类
class House:
def __init__(self, h_type, h_area):
self.h_type = h_type # 房子类型
self.h_area = h_area # 房子总面积
self.Item_list = [] # 房子中家具的列表
self.free_area = h_area # 初始时房子剩余面积等于总面积
def __str__(self):
print("-"*50)
return ("户型:[%s]\n总面积 %.2f平方米,剩余[%.2f]平米\n已装家具:%s" % (self.h_type, self.h_area, self.free_area, self.Item_list))
# 该方法实现了将家具安装到房子中
def add_Item(self, item):
# 1. 判断家具面积是否大于剩余面积
if item.Item_area > self.free_area:
print("%s 太大了!装不到您的房子内!" % item.Item_name)
return
# 2. 把家具装入家具列表中
self.Item_list.append(item.Item_name)
# 3. 计算房子的 剩余面积 = 剩余面积 - 家具面积
self.free_area -= item.Item_area
# 1. 创建家具
bed = HouseItem("席梦思", 40)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 19.5)
print(bed)
print(chest)
print(table)
# 2. 创建房子对象
my_home = House("两室一厅", 60)
my_home.add_Item(bed)
my_home.add_Item(chest)
my_home.add_Item(table)
print(my_home)
运行结果为:
3. 许三多开炮
具体要求:士兵许三多有一把 AK47,他可以选择开火。每次开火,子弹个数减少一枚,初始默认子弹3枚。当子弹个数为0时,士兵可以装填子弹,每次只能装填一个。
代码实现如下:
class Pistol:
def __init__(self, pname):
self.pname = pname
self.count = 3 # 默认初始有3枚子弹
# 枪能够发射子弹
def Launch(self):
if self.count <= 0:
print("[%s]没有子弹了!!!" % self.pname)
return
else:
self.count = self.count - 1
print("[%s]成功发射一枚子弹!还剩[%s]枚子弹!" % (self.pname, self.count))
# 枪装填子弹
def add_Bullets(self):
self.count = self.count + 1
print("为[%s]装填子弹!!此时有[%s]枚子弹!" % (self.pname, self.count))
class Soldiers:
def __init__(self, name):
self.name = name
self.gun = None # gun最后由创建类实例时赋值!!
def fire(self):
# 此时没枪
if self.gun == None:
print("士兵[%s]没有枪哦,无法射击!" % self.name)
return
else:
print("士兵[%s]开火!" % self.name)
self.gun.Launch()
p = Pistol("AK47")
s = Soldiers("许三多")
s.gun = p # 重要!!!士兵类中的gun由此赋值!!!
s.fire()
s.fire()
s.fire()
s.fire()
p.add_Bullets()
运行结果为:
二、函数相关练习(复习)
1. 名片管理系统
具体要求:程序启动,显示名片管理系统欢迎界面,并显示功能菜单。 用户可以用数字选择不同的功能。根据功能选择,执行不同的操作。用户名片记录用户的 姓名、电话、QQ、邮件。如果查询到指定的名片,用户可以选择 修改
或者 删除
名片。
功能菜单如下所示:
完整的代码如下(未优化,较冗长):
cards = []
del_name = None
# 启动程序时默认调用的方法,显示主界面
def choose():
print("**************************************************\n欢迎使用【名片管理系统】v1.0")
inputnum = input("\n请选择操作:\n1、新建名片\n2、显示全部\n3、查询名片\n\n0、退出系统\n**************************************************")
if inputnum == "1":
create_cards()
elif inputnum == "2":
display_all()
elif inputnum == "3":
search_card()
elif inputnum == "0":
exit()
else:
print("您输入的数字有误!")
# 新建名片
def create_cards():
global cards
print("以下操作将为您新建一个名片:")
name = input("请输入您的姓名:")
tel = int(input("请输入您的电话:"))
qq = int(input("请输入您的QQ:"))
email = input("请输入您的邮件:")
print("------------------------\n您的名片信息为:\n姓名:%s\n电话:%d\nQQ:%d\n邮件:%s" % (name, tel, qq, email))
cards.append([name, tel, qq, email])
input_q = input("------------------------\nTip: 输入 q 即可返回主界面")
if input_q == 'q':
choose()
else:
print("输入有误!默认为您跳转到主界面!")
choose()
# 显示全部名片信息
def display_all():
global cards
for index in cards:
print("------------------------\n姓名:%s\n电话:%d\nQQ:%d\n邮件:%s" % (index[0], index[1], index[2], index[3]))
input_q = input("------------------------\nTip: 输入 q 即可返回主界面")
if input_q == 'q':
choose()
else:
print("输入有误!默认为您跳转到主界面!")
choose()
# 查询用户
def search_card():
global cards
global del_name
input_name = str(input("请输入您要查询的用户姓名:"))
del_name = input_name # 将要查询的用户名保存到全局变量del_name中,方便之后做删除操作
isexist = False
for index in range(len(cards)):
if input_name == str(cards[index][0]):
print("-----------------------------\n您查询的用户信息如下:\n姓名:%s\n电话:%d\nQQ:%d\n邮件:%s" % (
cards[index][0], cards[index][1], cards[index][2], cards[index][3]))
isexist = True # 记录是否查询到该用户
inputnum = int(input("------------选择操作------------\n1、修改名片\n2、删除名片"))
if inputnum == 1:
del cards[index] # 这里定义对一个用户名片的修改操作为删除原来的所有信息,让用户重新输入
edit_card()
elif inputnum == 2:
del_card()
else:
pr = input("输入有误!请重新输入!\n1、修改名片\n2、删除名片")
if pr == '1':
del cards[index]
edit_card()
elif pr == '2':
del_card()
else:
print("您已经多次输入错误!自动为您退出系统!")
exit()
else:
continue
if isexist == False: # for循环结束后仍为False的话,代表为查询到相应用户名的用户
print("未查询到该用户信息!")
input_q = input("------------------------\nTip: 输入 q 即可返回主界面")
if input_q == 'q':
choose()
else:
print("输入有误!默认为您跳转到主界面!")
choose()
# 修改用户信息
def edit_card():
global cards
print("------------------------\n请重新输入名片信息:")
name = input("请输入您的姓名:")
tel = int(input("请输入您的电话:"))
qq = int(input("请输入您的QQ:"))
email = input("请输入您的邮件:")
print("------------------------\n您的名片信息为:\n姓名:%s\n电话:%d\nQQ:%d\n邮件:%s" % (name, tel, qq, email))
cards.append([name, tel, qq, email])
input_q = input("------------------------\nTip: 输入 q 即可返回主界面")
if input_q == 'q':
choose()
else:
print("输入有误!默认为您跳转到主界面!")
choose()
def del_card():
global cards
global del_name
for index in range(len(cards)):
if del_name == str(cards[index][0]):
del cards[index]
print("成功删除用户信息!")
input_q = input("------------------------\nTip: 输入 q 即可返回主界面")
if input_q == 'q':
choose()
else:
print("输入有误!默认为您跳转到主界面!")
choose()
choose() # 程序启动时就会调用该方法显示主界面
以下是运行结果:
输入1之后,用户可以新建自己的名片,新建操作成功完成后,系统会展示用户新建的名片信息,如下:
我们可以输入q回到主界面,再新建一个用户信息,如下:
回到主界面,输入2即可查看所有用户的名片信息:
同样地,我们可以回到主界面输入3即可输入用户姓名查询其名片信息:
在查询的基础上,可以进一步选择修改名片/删除名片操作,输入2成功删除该用户名片,那么,若再次查询全部用户信息就不会有该用户信息出现了。
我门亦可以在查询名片的基础上,修改该用户名片信息,如下:
修改操作完成后,回到主界面再次显示全部用户信息时,可以看到该用户的信息已经成功被修改。
2. 根据范围求能被3和7整除的数
具体要求:根据范围获取3和7整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和。如def func(start, end)。
实现步骤如下:
def func(start, end):
count = 0
sum = 0
for index in range(start, end + 1):
if index % 3 == 0 and index % 7 == 0:
count = count + 1
sum = sum + index
else:
continue
return count, sum
f = func(2, 100) # 求2-100之间符合要求的数,可以打印看看符合要求的数有21、42、63、84四个
print(f) # (4,210)