day15、作業(yè) 2019-01-11

1.聲明?個(gè)電腦類: 屬性:品牌、顏?、內(nèi)存大小 方法:打游戲、寫代碼、看視頻

a.創(chuàng)建電腦類的對象,然后通過對象點(diǎn)的?方式獲取、修改、添加和刪除它的屬性
b.通過attr相關(guān)?方法去獲取、修改、添加和刪除它的屬性

class Computer:
    # 聲明?個(gè)電腦類: 屬性:品牌、顏?、內(nèi)存大小    方法:打游戲、寫代碼、看視頻
    def __init__(self, brand='阿黃', color='黑', memory='128G'):
        self.brand = brand
        self.color = color
        self.memory = memory

  @staticmethod
    def play():
        print('玩游戲')

    @staticmethod
    def write():
        print('寫代碼')

    @staticmethod
    def look():
        print('看視頻')


def main():
    # 創(chuàng)建電腦類的對象:
    p1 = Computer()
    # 通過對象點(diǎn)的方式獲取它的屬性
    print(p1.brand)
    # 通過對象點(diǎn)的方式修改它的屬性
    p1.color = '綠'
    print(p1.color)
    # 通過對象點(diǎn)的方式添加它的屬性
    p1.like = 'yes'
    print(p1.like)
    # 通過對象點(diǎn)的方式刪除它的屬性
    del p1.like
    # print(p1.like)          # 報(bào)錯(cuò)。AttributeError: 'Computer' object has no attribute 'like'

    p2 = Computer()
    # 通過attr相關(guān)方法去獲取它的屬性
    print(getattr(p2, 'brand'))
    # 通過attr相關(guān)方法去修改它的屬性
    setattr(p2, 'color', '黃')
    print(p2.color)
    # 通過attr相關(guān)方法去添加它的屬性
    setattr(p2, 'no_like', 'yes')
    print(p2.no_like)
    # 通過attr相關(guān)方法去刪除它的屬性
    delattr(p2, 'no_like')
    # print(p1.no_like)          # 報(bào)錯(cuò)。AttributeError: 'Computer' object has no attribute 'no_like'


if __name__ == '__main__':
    main()

運(yùn)行效果:

阿黃
綠
yes
阿黃
黃
yes

2.聲明?個(gè)人的類和狗的類: 狗的屬性:名字、顏色、年齡 狗的方法:叫喚 人的屬性:名字、年齡、狗 人的方法:遛狗 a.創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃

class Dog:
    # 聲明?個(gè)狗的類,狗的屬性:名字、顏色、年齡   狗的方法:叫喚
    def __init__(self, name, color=None, age=None):
        self.name = name
        self.color = color
        self.age = age

    def jiao_huan(self):
        print(' %s 開始了叫喚。 ' % self.name)


class People:
    # 聲明?個(gè)人的類,人的屬性:名字、年齡、狗   人的方法:遛狗
    def __init__(self, name, dog, age=None):
        self.name = name
        self.age = age
        self.dog = dog

    def liu_gou(self):
        if self.dog:
            print(' %s 遛出了 %s ' % (self.name, self.dog))
            the_dog = Dog(self.dog)
            the_dog.jiao_huan()
        else:
            print(' %s 沒有狗呢' % self.name)

def main():
    # 創(chuàng)建人的對象小明,讓他擁有一條狗大黃,然后讓小明去遛大黃
    peo1 = People('小明', '大黃')
    peo1.liu_gou()
    peo2 = People('小紅')
    peo2.liu_gou()


if __name__ == '__main__':
    main()

運(yùn)行效果:

 小明 遛出了 大黃 
 大黃 開始了叫喚。 
 小紅 沒有狗呢

3.聲明一個(gè)圓類:

class Garden:
    # 3.聲明一個(gè)圓類:
    def __init__(self, r: float):
        self.r = r

    def mi_ji(self):
        mian_ji = 3.1415926 * float(self.r) ** 2
        print('這個(gè)園的面積為: %f cm^2' % mian_ji)

    def zh_chang(self):
        zhou_chang = 3.1415926 * 2 * float(self.r)
        print('這個(gè)圓的周長為: %f cm' % zhou_chang)


def main():
    # 3.聲明一個(gè)圓對象:
    g1 = Garden(3)
    g1.mi_ji()
    g1.zh_chang()


if __name__ == '__main__':
    main()

運(yùn)行效果:

這個(gè)園的面積為: 28.274333 cm^2
這個(gè)圓的周長為: 18.849556 cm

4.

創(chuàng)建一個(gè)學(xué)生類: 屬性:姓名,年齡,學(xué)號 方法:答到,展示學(xué)生信息

創(chuàng)建一個(gè)班級類: 屬性:學(xué)生,班級名 方法:添加學(xué)生,刪除學(xué)生,點(diǎn)名, 求班上學(xué)生的平均年齡

import json


# 4.創(chuàng)建一個(gè)學(xué)生類:  屬性:姓名,年齡,學(xué)號   方法:答到,展示學(xué)生信息
# 創(chuàng)建一個(gè)班級類:   屬性:學(xué)生,班級名   方法:添加學(xué)生,刪除學(xué)生,點(diǎn)名, 求班上學(xué)生的平均年齡


# 創(chuàng)建一個(gè)學(xué)生類
class Student:

    # 屬性:姓名,年齡,學(xué)號
    def __init__(self, name, age=None, sno=None):
        self.name = name
        self.age = age
        self.sno = sno

    # 方法: 答到。建立成靜態(tài)方法,因?yàn)闆]有用到對象屬性,也不需要類的字段
    @staticmethod
    def da_dao(classes, sname):
        # 導(dǎo)入學(xué)生信息
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 判斷有沒有這個(gè)人
        i = 0
        while i < len(all_students):
            if all_students[i]['sname'] == sname:
                print(' %s 答:"到"' % all_students[i]['sname'])
                break
            else:
                i += 1
        else:
            print('無人答到')

    # 方法: 展示學(xué)生信息
    def show(self):
        print('這個(gè)學(xué)生的信息為:\n名字: %s ;年齡: %s ;學(xué)號: %s ' % (self.name, self.age, self.sno))


class BanJi:
    # 屬性: 學(xué)生,班級名
    def __init__(self, classes=None, stu=None):
        self.stu = stu
        self.classes = classes

    # 方法: 添加學(xué)生
    def add_plus(self):
        sname = input('請輸入要添加學(xué)生的名字:')
        sage = int(input('請輸入要添加學(xué)生的年齡:'))
        # 自動(dòng)生成學(xué)號;
        with open('./files/sno.txt',encoding='utf-8') as f:
            sno = f.read()
        add_sno = sno.rjust(4, '0')
        new_sno = '16300609' + add_sno
        stu = Student(sname, sage, int(new_sno) + 1)
        new_sno_plus = str(int(sno) + 1)
        with open('./files/sno.txt', 'w', encoding='utf-8') as f:
            f.write(new_sno_plus)
        # 展示學(xué)生:
        stu.show()
        classes = self.classes
        # 導(dǎo)入學(xué)生信息:
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 沒有這個(gè)班就新開一個(gè)班:
        if not all_students:
            students[classes] = all_students
            with open('./files/students.json', 'w', encoding='utf-8') as f:
                json.dump(students, f)
        # 保存學(xué)生信息
        list1 = [('sno', sno), ('sname', sname), ('sage', sage)]
        dict1 = dict(list1)
        all_students.append(dict1)
        students[classes] = all_students
        with open('./files/students.json', 'w', encoding='utf-8') as f:
            json.dump(students, f)
        print('添加成功。')

    # 方法: 刪除學(xué)生
    def del_plus(self):
        sname = input('請輸入要?jiǎng)h除學(xué)生的名字:')
        classes = self.classes
        # 導(dǎo)入學(xué)生信息
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 找出學(xué)生并刪除
        i = 0
        while i < len(all_students):
            if all_students[i]['sname'] == sname:
                del all_students[i]
                break
            i += 1
        # 保存學(xué)生信息
        students[classes] = all_students
        with open('./files/students.json', 'w', encoding='utf-8') as f:
            json.dump(students, f)
        print('刪除成功。')

    # 方法: 點(diǎn)名
    def dian_ming(self):
        print('這個(gè)班的學(xué)生有:')
        # 導(dǎo)入學(xué)生信息
        classes = self.classes
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 展示一個(gè)班的學(xué)生姓名
        for i in all_students:
            print(i['sname'])
        j = 'y'
        while j == 'y':
            sname = input('請輸入名字點(diǎn)名:')
            stu_add = Student(sname)
            stu_add.da_dao(self.classes, sname)
            j = input('輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):')

    # 方法: 求班上學(xué)生的平均年齡
    def age_sum(self):
        classes = self.classes
        # 導(dǎo)入學(xué)生信息
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 求和
        sum1 = 0
        for i in all_students:
            sum1 += i['sage']
        p_j = sum1 / len(all_students)
        print(' %s 這個(gè)班的平均年齡為: %.2f ' % (classes, p_j))

    # 展示一個(gè)班學(xué)生的所有信息
    def show_stu(self):
        print('這個(gè)班級的所有學(xué)生信息為:')
        # 導(dǎo)入學(xué)生信息
        classes = self.classes
        with open('./files/students.json', encoding='utf-8') as f:
            students = json.load(f)
        all_students = students[classes]
        # 展示一個(gè)班的學(xué)生
        for i in all_students:
            print(i)


def main():
    # 創(chuàng)建 班級 對象
    class1 = BanJi('class1')
    # 添加學(xué)生
    class1.add_plus()
    # 展示一個(gè)班學(xué)生的所有信息
    class1.show_stu()
    # 點(diǎn)名
    class1.dian_ming()
    # 刪除學(xué)生
    class1.del_plus()
    # 展示一個(gè)班學(xué)生的所有信息
    class1.show_stu()
    # 點(diǎn)名
    class1.dian_ming()
    # 求班上學(xué)生的平均年齡
    class1.age_sum()


if __name__ == '__main__':
    main()

運(yùn)行效果:

請輸入要添加學(xué)生的名字:阿黃
請輸入要添加學(xué)生的年齡:3
這個(gè)學(xué)生的信息為:
名字: 阿黃 ;年齡: 3 ;學(xué)號: 163006090003 
添加成功。
這個(gè)班級的所有學(xué)生信息為:
{'sno': 163006091001, 'sname': '瀧澤蘿拉', 'sage': 18}
{'sno': 163006091002, 'sname': '蒼井空', 'sage': 19}
{'sno': '2', 'sname': '阿黃', 'sage': 3}
這個(gè)班的學(xué)生有:
瀧澤蘿拉
蒼井空
阿黃
請輸入名字點(diǎn)名:瀧澤蘿拉
 瀧澤蘿拉 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):y
請輸入名字點(diǎn)名:蒼井空
 蒼井空 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):y
請輸入名字點(diǎn)名:阿黃
 阿黃 答:"到"
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):n
請輸入要?jiǎng)h除學(xué)生的名字:阿黃
刪除成功。
這個(gè)班級的所有學(xué)生信息為:
{'sno': 163006091001, 'sname': '瀧澤蘿拉', 'sage': 18}
{'sno': 163006091002, 'sname': '蒼井空', 'sage': 19}
這個(gè)班的學(xué)生有:
瀧澤蘿拉
蒼井空
請輸入名字點(diǎn)名:阿黃
無人答到
輸入 y 繼續(xù)點(diǎn)名(輸入其它任何字符結(jié)束點(diǎn)名):n
 class1 這個(gè)班的平均年齡為: 18.50 

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容