0321作业

"""
1. 创建一个类Circle,具有radius实例属性
编写打印方法,返回属性值
编写实例方法,输出圆的面积
编写析构方法,输出"圆的半径不能为负数"
"""
import math
class Circle:
    # 构造方法
    def __init__(self, radius):
        self.radius = radius
        if radius < 0:
            print("圆的半径不能为负数")
            self.radius = 0
    # 打印属性值
    def print_radius(self):
        print(f"半径为{self.radius}")
    # 计算圆的面积
    def print_area(self):
        area = math.pi * self.radius * self.radius
        print(f"圆的面积为{area}")

    def __del__(self):
        print("圆的半径不能为负数")

# 创建对象
c1 = Circle(5)
c1.print_radius()
c1.print_area()

"""
2. 定义一个狗类Dog
类属性:狗品种breed
定义一个有参的构造方法:有狗姓名name,狗年龄age两个实例属性
定义一个打印方法:返回'[name]、[age] the [breed] is barking!'
定义一个析构方法:输出我是析构方法
实例化一个对象调用打印方法
"""

class Dog:
    breed = '哈士奇'
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
       print(f'{self.name}、{self.age} the {self.breed} is barking!')

    def __del__(self):
        print('我是析构方法')

# 实例化一个对象调用打印方法
dog = Dog('旺财', 3)
dog.show()

"""
3. 要求设计一个学生类Student
类属性学校school,默认值为华清远见
属性有:姓名、html成绩、JavaScript成绩、python成绩
添加打印方法输出完整的学生信息
添加类方法用来修改类属性的值
添加求学生总分的方法
添加求学生平均分的方法
实例化一个学生对象,调用所有方法
"""
class Student:
    school = '华清远见'
    def __init__(self, name, html, js, python):
        self.name = name
        self.html = html
        self.js = js
        self.python = python

    # 打印方法
    def show(self):
       print(f'学校: {self.school},姓名:{self.name},html成绩:{self.html},JavaScript成绩:{self.js},python成绩:{self.python}')

    # 修改类属性的方法
    @classmethod
    def change_school(cls, school):
        cls.school = school
    # 求总分的方法
    def total(self):
        return self.html + self.js + self.python
    # 求平均分的方法
    def avg(self):
        return self.total() / 3

s1 = Student('张三', 80, 90, 100)
s1.show()
Student.change_school('池州学院')
s1.show()
print(s1.total())
print(s1.avg())

"""
4. 定义一个Person类
定义一个类属性:国家,默认值为:中国
定义一个构造方法:设置姓名,年龄属性
定义一个静态方法,功能描述:输出“我们都是中国人”
定义一个类方法,用来获取类属性值
定义一个类方法,用来修改类属性值
定义一个打印方法,输出所有属性值
实例化一个对象调用所有方法
"""
class Person:
    country = "中国"
    def __init__(self, name, age):
        self.name = name
        self.age = age
    @staticmethod
    def show():
        print("我们都是中国人")
    @classmethod
    def get_country(cls):
        return cls.country
    @classmethod
    def set_country(cls, country):
        cls.country = country
    def show_info(self):
        print(f"姓名:{self.name},年龄:{self.age},国家:{Person.country}")

p1 = Person("张三", 18)
p1.show()
print(Person.get_country())
Person.set_country("美国")
print(Person.get_country())
p1.show_info()

"""
5. 有一个计算器类,具有运算功能,能对两个整数进行相加运算
有一个闹钟类,具有闹铃功能,能发出“懒猪起床”的声音
有一个手机类,需要同时拥有运算功能和闹铃功能,实现多继承
实例化一个手机类的对象,测试继承的两个功能
"""
class Calculator:
    def add(self, a, b):
        return a + b
class Alarm:
    def alarm(self):
        print("懒猪起床")


class Phone(Calculator, Alarm):
    pass

phone = Phone()
print(phone.add(1, 2))
phone.alarm()

"""
6. 定义名为Fruit的类
编写构造方法,接收1个外部参数color
编写打印方法,返回属性值
编写Fruit的子类Apple,定义方法setColor,给color赋值
实例化子类对象,调用setColor方法
"""


class Fruit:
    def __init__(self, color=None):
        self.color = color
    # 打印方法,返回属性值
    def show(self):
        return self.color


class Apple(Fruit):
    # 定义方法setColor,给color赋值
    def setColor(self, color):
        self.color = color

# 实例化子类对象,调用setColor方法
apple = Apple()
apple.setColor('red')
print(apple.show())

"""
7. 定义一个商品类
在构造方法中添加以下属性:ball_name(球类名称)、price(球类价格)、 number(存球数量,默认值为 100),
使用传参的方式对实例属性进行赋值
添加一个打印方法,格式化输出“球类:XXX(ball_name),价格:XX(price),目前存 球数量:XXX(number)”
添加一个析构方法,打印输出“本店已打烊,欢迎下次再来!”
添加一个实例方法 borrow,功能实现将存球数量减 5,并显示当前存球量
添加一个实例方法 restore(n),功能实现将存球量加 n,并显示当前存球量
添加一个实例方法 set_price(m),返回修改后球的价格
添加一个实例方法 get_number,如果存球量大于 100,则返回“本店将要打折处理 库存球”,如果存球量小于 50,则返回“本店将要购买一批新球”,其他则返回“正常营 业!”
创建一个对象:bl = Ball(“篮球”,108,50)
循环调用 borrow 方法直到存球量<=0 时,当存球量为 0 时,输出“库存归 0, 请及时补充库存”
调用测试所有的实例方法
"""
class Ball:
    def __init__(self,ball_name,price,number=100):
        self.ball_name = ball_name
        self.price = price
        self.number = number

    # show方法
    def show(self):
        print(f"球类:{self.ball_name}(ball_name),价格:{self.price}(price),目前存 球数量:{self.number}(number)")

    # 析构方法
    def __del__(self):
        print("本店已打烊,欢迎下次再来!")

    # borrow方法
    def borrow(self):
        self.number -= 5
        print(f"当前球数量为:{self.number}")

    # restore方法
    def restore(self,n):
        self.number += n
        print(f"当前球数量为:{self.number}")

    # set_price方法
    def set_price(self):
        self.price = self.price * 0.9
        return self.price

    # get_number方法
    def get_number(self):
        if self.number > 100:
            return "本店将要打折处理 库存球"
        elif self.number < 50:
            return "本店将要购买一批新球"
        else:
            return "正常营业!"

# 创建对象
b1 = Ball("篮球",108,50)
while b1.number > 0:
    b1.borrow()
    if b1.number == 0:
        print("库存归 0, 请及时补充库存")
        break

"""
8. 定义一个信用卡类
用面向对象实现一个信用卡取款,存款,查余额的业务,具体要求如下:
1. 定义一个信用卡类,命名 Creditcard , 添加类属性 area,值为‘中国’
2. 添加魔法构造方法,默认值传参,对象属性及相应的默认值如下:
开户行 bank(默认值为空字符串),存款 money(默认为0),信用额度 credit( 默认为 1000)
3. 添加打印方法,按如下格式返回信息:XX(area)发行的XX(bank)银行 卡,现存款XX(money)元,目前可以透支XX(credit)元
4. 添加一个进入账户的方法 enter(),无参有返。用户从键盘输入用户名和密码,当 输入与以下设置相匹配正确时账户:user 密码:200209,提醒登录成功,返回 布尔值True,否则 False,并提醒:不能使用此卡
5. 添加往卡内存钱的方法 save(n),n 为存入的钱数。
6. 添加提高信用额度的方法 setCredit(n),n 为新的可透支钱数。
7. 添加付款方法 buy(n),n 为要付款的钱数。函数内完成如下功能:首先调用登录方法 enter()。登陆成功后,提示:目前可以消费的额度为XX( money 与 credit 之和)。
9. 创建一个对象 js, 开户行为‘建设银行’。调用往卡内存钱的方法,存入 2000 元打印对象 js
10. 用提高信用额度的方法,把可透支钱数修改为 3000 运行一下付款方法 buy( 2500)
"""
class Creditcard:
    area = '中国'
    def __init__(self,bank='',money=0,credit=1000):
        self.bank = bank
        self.money = money
        self.credit = credit

    # 打印方法
    def show(self):
        print(f'{self.bank}({self.area})发行{self.bank}银行卡,现存款{self.money}元,目前可以透支{self.credit}元')

    # 进入账户
    def enter(self):
        user = input('请输入用户名:')
        password = input('请输入密码:')
        if user == 'user' and password == '200209':
            print('登录成功')
            return True
        else:
            print('不能使用此卡')
            return False

    # 往卡内存钱的方法
    def save(self,n):
        self.money += n
        print(f'存入{n}元,当前余额为{self.money}元')

    # 提高信用额度的方法
    def setCredit(self,n):
        self.credit = n
        print(f'设置新的可透支额度为{self.credit}元')

    # 付款方法
    def buy(self,n):
        if self.enter():
            print(f'目前可以消费的额度为 {self.money + self.credit} 元')
            if n <= self.money + self.credit:
                if n <= self.money:
                    # 消费金额小于或等于余额,直接扣除
                    self.money -= n
                else:
                    # 消费金额大于余额,但在总额度之内
                    # 先用完余额,再从透支额度中扣除剩余部分
                    remain = n - self.money
                    self.money = 0
                    self.credit -= remain
                print(f'付款成功,当前余额为 {self.money} 元,可透支额度为 {self.credit} 元')
            else:
                print("消费额度超出可用限额!")

        else:
            print('不能使用此卡')

# 创建一个对象 js, 开户行为‘建设银行’
js = Creditcard('建设银行')
js.show()
js.save(2000)
js.show()
js.setCredit(3000)
js.buy(2500)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值