三道關於python面向對象的練習題

1.題目

小明和小美都愛跑步
小明體重 75 公斤
小美體重 45 公斤
每次跑步會減肥 0.5 公斤
每次喫東西體重增加 1 公斤

需求分析

小明、小美都是一個具體的對象,他們都是人,所以應該抽象成人類
小明、小美是具體的對象的姓名,而體重是另一個屬性,所以有兩個屬性
跑步、喫東西都是一種行爲,所以也有兩個方法

類圖

在這裏插入圖片描述

實現代碼

class Person:
    # 構造方法
    def __init__(self, name, weight):
        # 兩個實例屬性
        self.name = name
        self.weight = weight

    # 打印實例對象會返回的內容
    def __str__(self):
        return f"名字:{self.name} 體重:{self.weight} 很愛跑步"

    # 跑步實例方法
    def run(self):
        print(f"{self.name} 在跑步,體重減少0.5公斤")
        self.weight -= 0.5

    # 喫飯實例方法
    def eat(self):
        print(f"{self.name} 在喫飯,體重增加1公斤")
        self.weight += 1

# 實例對象一:小明
xiaoming = Person("小明", 75)
print(xiaoming)
xiaoming.eat()
xiaoming.run()
print(xiaoming)

# 實例對象二:小美
xiaomei = Person("小美", 45)
print(xiaomei)
xiaomei.eat()
xiaomei.run()
print(xiaomei)



# 輸出結果
名字:小明 體重:75 很愛跑步
小明 在喫飯,體重增加1公斤
小明 在跑步,體重減少0.5公斤
名字:小明 體重:75.5 很愛跑步

名字:小美 體重:45 很愛跑步
小美 在喫飯,體重增加1公斤
小美 在跑步,體重減少0.5公斤
名字:小美 體重:45.5 很愛跑步

2.題目

設計一個類Person,生成若干實例,在終端輸出如下信息

小明,10歲,男,上山去砍柴

小明,10歲,男,開車去東北

小明,10歲,男,最愛大保健

老李,90歲,男,上山去砍柴

老李,90歲,男,開車去東北

老李,90歲,男,最愛大保健

實際代碼

並不代表最優代碼,大家有更好的寫法可以評論下

class person:
    # 構造方法,爲實例對象初始化屬性
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    
    # 獲取對象屬性的方法
    def GetSelfMessage(self):
        return self.name, self.age, self.sex
    
    # 實例方法,用於實例對象執行某種行爲
    def DoSomething(self, doing):
        print(*self.GetSelfMessage(), doing)

# 實例對象一
xiaoming = person("小明", 10, "男")
xiaoming.DoSomething("上山砍柴")
xiaoming.DoSomething("開車去東北")
xiaoming.DoSomething("大保健")

# 實例對象二
laoli = person("老李", 90, "男")
laoli.DoSomething("上山砍柴")
laoli.DoSomething("開車去東北")
laoli.DoSomething("大保健")


# 輸出結果
小明 10 男 上山砍柴
小明 10 男 開車去東北
小明 10 男 大保健
老李 90 男 上山砍柴
老李 90 男 開車去東北
老李 90 男 大保健

3.題目

房子(House)有戶型、總面積、傢俱名稱列表;新房子沒有任何的傢俱 
傢俱(HouseItem)有名字、佔地面積
席夢思(bed) 佔地 4 平米
衣櫃(bed) 佔地 2 平米
餐桌(bed) 佔地 1.5 平米
將以上三個傢俱添加到房子中
打印房子時,要求輸出:戶型、總面積、剩餘面積、傢俱名稱列表

需求分析

傢俱有兩個屬性,房子表面上有三個屬性
新房子沒有任何的傢俱,代表構造方法不需要給傢俱名稱列表屬性初始化賦值
但房子其實還有一個特殊屬性,剩餘面積,它的初始值應該和總面積相同
房子添加傢俱後,剩餘面積應該減掉傢俱的佔地面積
席夢思、衣櫃、餐桌都是一個具體的對象,都是傢俱類的實例對象

思考:房子、傢俱兩個類應該先開發哪個類

傢俱類
因爲傢俱類簡單,只有兩個方法,且沒有行爲
房子要使用到傢俱,被依賴的類,通常應該先開發,可以避免在開發主類過程中,要中途插入開發被依賴的類

類圖

在這裏插入圖片描述

實現代碼

傢俱類

class HouseItem:
    # 構造方法
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f"傢俱名稱:{self.name} 佔地面積:{self.area}" 

房子類

class House:
    # 構造方法
    def __init__(self, type, area):
        self.house_type = type
        self.area = area
        # 剩餘面積
        self.free_area = self.area
        # 傢俱名稱列表
        self.item_list = []

    # str
    def __str__(self):
        return f"戶型:{self.house_type}\n" \
               f"總面積:{self.area}\n" \
               f"剩餘面積:{self.free_area}\n" \
               f"傢俱:{self.item_list}\n"
	# Python小白學習交流羣:153708845
    # 添加傢俱
    def add_item(self, item):
        # 1、傢俱佔地面積>剩餘面積
        if item.area > self.free_area:
            print("剩餘面積不足以添加 ", item.name)
            return
        # 2、添加傢俱名稱
        self.item_list.append(item.name)
        # 3、計算剩餘面積
        self.free_area -= item.area

執行代碼

# 創建三個傢俱
bed = HouseItem("席夢思", 4)
chest = HouseItem("衣櫃", 2)
table = HouseItem("餐桌", 1.5)

# 創建房子實例對象
poloHouse = House("120平復試", 120)
# 添加傢俱
poloHouse.add_item(bed)
poloHouse.add_item(chest)
poloHouse.add_item(table)
# 打印房子信息
print(poloHouse)


# 輸出結果
戶型:120平復試
總面積:120
剩餘面積:112.5
傢俱:['席夢思', '衣櫃', '餐桌']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章