文章目录

  • 一、面向对象相关习题
  • 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 平米,将以上三件 家具 添加 到 房子 中。打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表。

类的设计如下所示:

python 面向对象 get set Python 面向对象的题目_用户信息

# 家具类
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)

运行结果为:

python 面向对象 get set Python 面向对象的题目_用户信息_02

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()

运行结果为:

python 面向对象 get set Python 面向对象的题目_python 面向对象 get set_03

二、函数相关练习(复习)

1. 名片管理系统

具体要求:程序启动,显示名片管理系统欢迎界面,并显示功能菜单。 用户可以用数字选择不同的功能。根据功能选择,执行不同的操作。用户名片记录用户的 姓名、电话、QQ、邮件。如果查询到指定的名片,用户可以选择 修改 或者 删除 名片。

功能菜单如下所示:

python 面向对象 get set Python 面向对象的题目_python 面向对象 get set_04


完整的代码如下(未优化,较冗长):

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()  # 程序启动时就会调用该方法显示主界面

以下是运行结果:

python 面向对象 get set Python 面向对象的题目_python_05


输入1之后,用户可以新建自己的名片,新建操作成功完成后,系统会展示用户新建的名片信息,如下:

python 面向对象 get set Python 面向对象的题目_python 面向对象 get set_06

我们可以输入q回到主界面,再新建一个用户信息,如下:

python 面向对象 get set Python 面向对象的题目_用户信息_07

回到主界面,输入2即可查看所有用户的名片信息:

python 面向对象 get set Python 面向对象的题目_python 面向对象 get set_08


同样地,我们可以回到主界面输入3即可输入用户姓名查询其名片信息:

python 面向对象 get set Python 面向对象的题目_用户名_09


在查询的基础上,可以进一步选择修改名片/删除名片操作,输入2成功删除该用户名片,那么,若再次查询全部用户信息就不会有该用户信息出现了。

python 面向对象 get set Python 面向对象的题目_用户信息_10


我门亦可以在查询名片的基础上,修改该用户名片信息,如下:

python 面向对象 get set Python 面向对象的题目_用户名_11


修改操作完成后,回到主界面再次显示全部用户信息时,可以看到该用户的信息已经成功被修改。

python 面向对象 get set Python 面向对象的题目_python_12

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)