PYTHON奇幻冒险记22 去,成为强者

PYTHON奇幻冒险记22 去,成为强者

PYTHON奇幻冒险记22 去,成为强者


每天只需要占用大家中午吃饭的半小时,有事没事看一下,轻松掌握一门语言!让我们一起努力吧。


前言


读者朋友们,大家好,欢迎来到小鹏鹏的奇幻冒险之旅!
通过前期的积累,我们已经可以很好的适应PYRTHON的基本生存法则!
本期的内容主要是想告诉大家!如何把理论转换为实践!
相信现在的很多年轻人,生活都不容易,为了生活,我们需要每日每夜的加班工作!
今天我想给大家分享的就是一份工作?做什么的呢?
图书馆管理员!!!
小鹏鹏只想躺着赚钱,别的工作都太“类”了!

1 明确目的


首先我们要明白我们要做什么?图书馆的功能是什么?

1. 查阅功能:可以提供书记的信息以及借阅的状态
2. 添加功能:可以录入新购买得到的书籍信息
3. 借阅功能:可以显示书籍的状态是借出还是有剩余!
4. 归还功能:可以更新书籍的借阅信息状态

2 细化功能,逐个击破

面对一个问题,我们应该如何去解决问题?低头拉车,还是抬头看一下脚下的路在哪里呢?不要害怕,我们应该都在图书馆借过书吧,现在想一想,我们应该如何去实现这个任务呢?

2.1 框架构想

可以明白两点内容!

1. 每一本书都有自己的书名,作者,和借阅信息
2. 功能的叠加就是系统!

2.2 代码实现

2.2.1 定义booknew类

可以用初始化方法__init__

class booknew:
    def __init__(self, name, author,price, status,number):
        self.name           = name
        self.author         = author
        self.price          = price
        self.status         = status
        self.number         = number


book = booknew('PYTHON奇幻冒险记','TOMMI_WEI','$10','已借出','20')
print(book.author)

运行结果:

TOMMI_WEI

书籍的number 可以告诉我们,还有没有书籍可借。如果数量为0,那就不能再借了!但是有没有什么办法知道这本书是借出去了还是根本就没有呢?

2.2.2 锦上添花

class Booknew:
    def __init__(self, name, author, price, state = 1):
        self.name    = name
        self.author  = author
        self.price   = price
        self.state   = state

    def show_info(self):
        if self.state == 0:
            status = '未借出'
        else:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)

book = Booknew('PYTHON权威指南', 'TOMMI_WEI', '100元')
# 传入参数,创建实例
print(book.show_info())

运行结果:

名称:《PYTHON权威指南》 作者:TOMMI_WEI 推荐语:100元
状态:已借出 

是不是很神奇呢?
现在我们还是不满足与现状!

2.2.3 锦上添花

在PYTHON的奇幻世界里,没有什么不可能!
现在我们要学习一个新的技能!str(self)
给大家解释一下:只要在类中定义了__str__(self)方法,那么当使用print 打印实例对象的时候,就会直接打印出这个方法中的return 的数据!

大家可以好好的想想!

class Booknew:

    def __init__(self, name, author, price, state = 0):
        self.name   = name
        self.author = author
        self.price  = price
        self.state  = state

    def __str__(self):
        if self.state == 0:
            status = '未借出'
        else:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)

book1 = Booknew('PYTHON权威指南','TOMMI_WEI','全球统一售价100元')
# 传入参数,创建实例对象
print(book1)
# 注意区别!直接打印对象即可,不能写成print(book1.__str__())

2.3 功能实现FUNC_ALL

2.3.1 功能实现

首先,设计一个软件或者一个产品,一定要有美感!界面!用户界面!为什么CSDN上很多乱七八糟的文章能上热搜!因为有噱头!即使写的就是一堆没有价值的文字!而我,花了很多力气写的文章却没有人阅读!我理解界面应该具有一下功能!

  1. 查阅书籍
  2. 添加书籍
  3. 借阅书籍
  4. 归还书籍
  5. 退出系统
    请输入你的选择数字:
class FUNC_ALL:

    def user_interface(self):
        print('欢迎来到PYTHON的奇幻世界,这里有各种各样的书籍,满足你的各种需求!\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.show_all_book()
                # 调用对象方法时self不能忘
            elif choice == 2:
                self.add_book()
            elif choice == 3:
                self.lend_book()
            elif choice == 4:
                self.return_book()
            elif choice == 5:
                print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')
                break

2.3.2 再接再厉

不知道你是否注意到了一个细节呢?
我们定义了一个方法show_all_book(),它的功能是打印出系统里所有书籍的信息!


class Booknew:
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price = price
        self.state = state

    def __str__(self):
        if self.state == 0:
            status = '未借出'
        else:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)

class FUNC_ALL:
    def __init__(self):
        book1 = Booknew('XXX','XXX','XXX')
        book2 = Booknew('XXX','XXX','XXX')
        book3 = Booknew('XXX','XXX','XXX', 1)

function= FUNC_ALL()

2.3.3 继续改造

我们可以看到书要是很多的时候,能不能提高一下我们的存储效率呢?

class FUNC_ALL:

    books = []
    # 创建一个列表,列表里每个元素都是Book类的一个实例

    def __init__(self):
        book1 = Book('XXX','XXX','XXX')
        book2 = Book('XXX','XXX','XXX')
        book3 = Book('XXX','XXX','XXX', 1)
        # 创建三个实例对象

        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
        # 往列表依次添加元素,注意调用类属性books时,self不能丢
        # self.books = [book1, book2, book3]
        # 上面三行代码,可简化为一行,即直接创建列表。这种情况下,可不用在前面创建空列表。

2.3.4 提高改进

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price = price
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)
 
class FUNC_ALL:

    books = []
    # 存储书籍的列表,每一个元素都是Book的实例对象
    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)

manager = FUNC_ALL()
print(len(manager.books))
# 打印列表长度
for i in manager.books:
    print(i)

运行结果:

3
名称:《PYTHON红宝书》 作者:TOMMI_WEI 推荐语:100元
状态:未借出 
名称:《PYTHON权威指南》 作者:TOMMI_WEI 推荐语:100元
状态:未借出 
名称:《PYTHON奇幻冒险记》 作者:TOMMI_WEI 推荐语:100元
状态:已借出 

2.3.5 第一阶段工作

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name   = name
        self.author = author
        self.price  = price
        self.state  = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)
 
class FUNC_ALL:

    books = []

    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
    # 用户界面
    def user_interface(self):
        print('欢迎PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
                break

    def all_in_book(self):
        for book in self.books:
            print(book)
            print('')

manager = FUNC_ALL()
manager.user_interface()

运行结果:

欢迎PYTHON的奇幻冒险世界。

1.查询所有书籍
2.添加书籍
3.借出书籍
4.归还书籍
5.退出系统

请输入数字选择对应的功能:1
名称:《PYTHON红宝书》 作者:TOMMI_WEI 推荐语:100元
状态:未借出 

名称:《PYTHON权威指南》 作者:TOMMI_WEI 推荐语:100元
状态:未借出 

名称:《PYTHON奇幻冒险记》 作者:TOMMI_WEI 推荐语:100元
状态:已借出 

2.4 添加add()的功能

现在我们买了一些新书,需要添加一下,怎么办呢?是不是需要添加一下add()函数呢?真棒!不谋而合!但是我们应该如何实现呢?

 
class FUNC_ALL:

    books = []

    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
    # 用户界面
    def user_interface(self):
        print('欢迎PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
            elif choice ==2:
            	self.add_book()

    def all_in_book(self):
        for book in self.books:
            print(book)
            print('')
    def add_book(self):
        # 可以添加你喜欢的书籍
manager = FUNC_ALL()
manager.user_interface()

上述的代码这是一个简单的尝试,下面我们要开始我们真正的表演了!

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price= price
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)

class FUNC_ALL:

    books = []

    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
    # 用户界面
    def user_interface(self):
        print('欢迎PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
            elif choice ==2:
            	self.add_book()
            else:
            	break

    def all_in_book(self):
        for book in self.books:
            print(book)
            print('')
    def add_book(self):
        # 可以添加你喜欢的书籍
        book_name = input('请开始你的表演!说出你喜欢的书籍!')
manager = FUNC_ALL()
manager.user_interface()

运行结果:

1.查询所有书籍
2.添加书籍
3.借出书籍
4.归还书籍
5.退出系统

请输入数字选择对应的功能:2
请开始你的表演!说出你喜欢的书籍!PYTHON绿皮书
1.查询所有书籍
2.添加书籍
3.借出书籍
4.归还书籍
5.退出系统

请输入数字选择对应的功能:5 

2.4.1 你以为这样就可以了?

其实你写错啦!上面这是第一步!接下来我们还是要改进一下我们的代码!因为我们并不像止步不前!
要不断地前进,前进,才能为中华民族的崛起做贡献!

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price= price
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)

class FUNC_ALL:

    books = []

    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
    # 用户界面
    def user_interface(self):
        print('欢迎PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
            elif choice ==2:
            	self.add_book()
            else:
            	break

    def all_in_book(self):
        for book in self.books:
            print(book)
            print('')
    def add_book(self):
        # 可以添加你喜欢的书籍
        book_name   = input('请开始你的表演!说出你喜欢的书籍!')
        add_author  = input('请输入作者')
        add_price   = input('请输入价钱')
        
        new_book = Booknew(book_name,add_author,add_price)
        self.books.append(new_book)
        # 将new_book
manager = FUNC_ALL()
manager.add_book()

2.5 借书的功能实现

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price= price
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)

class FUNC_ALL:

    books = []

    def __init__(self):
        book1 = Booknew('PYTHON红宝书','TOMMI_WEI','100元')
        book2 = Booknew('PYTHON权威指南','TOMMI_WEI','100元')
        book3 = Booknew('PYTHON奇幻冒险记','TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
    # 用户界面
    def user_interface(self):
        print('欢迎PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
            elif choice ==2:
            	self.add_book()
            elif choice == 3:
            	self.lend_book()
            else:
            	break

    def all_in_book(self):
        for book in self.books:
            print(book)
            print('')
    def add_book(self):
        # 可以添加你喜欢的书籍
        book_name   = input('请开始你的表演!说出你喜欢的书籍!')
        add_author  = input('请输入作者')
        add_price   = input('请输入价钱')
        
        new_book = Booknew(book_name,add_author,add_price)
        self.books.append(new_book)
        # 将new_book
    def lend_book(self):
    
manager = FUNC_ALL()
manager.add_book()

框架已经写好了,然后我们应该如何去实现呢?

    def lend_book(self):
        borrow_name = input('请输入你想借阅的书籍名称:')
        for book in self.books:
        # 遍历列表,此时books有三个元素,即book1,book2,book3三个实例
            if book.name == borrow_name:
                # 如果列表中有实例的属性name和输入的书籍名称相等
                if book.state == 1:
                # 借阅状态为'已借出'
                    print('你来晚一步,这本书已经被借走了噢')
                    break
                    # 一旦有对象满足条件,则退出for循环
                else:
                # 借阅状态为'未借出'
                    print('借阅成功!借了不看会变胖噢~')
                    book.state = 1
                    break
            else:
                continue
          # 如果不满足book.name == borrow_name,则继续循环(这两行可以省略)  
        else:
            print('这本书暂时没有收录在系统里呢')

大家应该注意到一个很明显的细节!我们用了一些层级else语句!,不过最外层的是for…else,表示的是当for循环里面的对象都遍历完之后,才执行else的语句!
但是我们的代码是不是还可以再精简一下呢?

    def check_book(self, name):
        for book in self.books:
        # 遍历列表的每个元素,即每个Book实例
            if book.name == name:
            # 如果存在有实例名称与输入书籍名称是一样的
                 return book 
                 # 返回该实例对象,遇到return语句方法停止执行  
        else:
        # 若for循环中,没有返回满足条件的对象,则执行else子句 
            return None
            # 返回None值

这里我们用到了None,为什么会用到呢?答案是肯定的!因为后面我们要用None去做判断!

    def check_book(self,name):
        for book in self.books:
            if book.name == name:
                 return book   
        else:
            return None

    def lend_book(self):
        name = input('请输入书籍的名称:')
        res = self.check_book(name)
        # 将name作为参数调用check_book方法,并将返回值赋值给变量res

        if res != None:
        # 如果返回值不等于None值,即返回的是实例对象
            if res.state == 1:
            # 如果实例对象的属性state为1,即借阅状态为已租借
                print('你来晚了一步,这本书已经被借走了噢')
            else:
            # 如果state为0
                print('借阅成功,借了不看会变胖噢~')
                res.state = 1
                # 书籍借出后属性state变为1
        else:
        # 如果返回值为None值
            print('这本书暂时没有收录在系统里呢')

这样代码是不是很有趣了啊!
下面我们需要把这些代码再整合一下!
因为我们就是这样的精益求精!

class Booknew:
 
    def __init__(self, name, author, comment, state = 0):
        self.name = name
        self.author = author
        self.comment = comment
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
 
class BookManager:
    #存储书籍的列表,每一个元素都是Book的实例对象
    books = []
    def __init__(self):
        book1 = Book('XXX','XXX','XXX')
        book2 = Book('XXX','XXX','XXX')
        book3 = Book('XXX','XXX','XXX',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
 
    def menu(self):
        print('XXX\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借出书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.show_all_book()
            elif choice == 2:
                self.add_book()
            elif choice == 3:
                self.lend_book()
            elif choice == 4:
                self.return_book()
            elif choice == 5:
                print('感谢使用!')
                break
 
    def show_all_book(self):
        for book in self.books:
            print(book)
            print('')

    def add_book(self):
        new_name = input('请输入书籍名称:')
        new_author =  input('请输入作者名称:')
        new_comment = input('请输入书籍推荐语:')
        new_book = Book(new_name, new_author, new_comment)
        self.books.append(new_book)
        print('书籍录入成功!\n')

    def check_book(self,name):
        for book in self.books:
            if book.name == name:
                 return book 
        else:
            return None

    def lend_book(self):
        name = input('请输入书籍的名称:')
        res = self.check_book(name)

        if res != None:
            if res.state == 1:
                print('你来晚了一步,这本书已经被借走了噢')
            else:
                print('借阅成功,借了不看会变胖噢~')
                res.state = 1
        else:
            print('这本书暂时没有收录在系统里呢')
 
manager = BookManager()
manager.menu()

2.5.1 归还书籍

   def return_book(self):
        name = input('请输入归还书籍的名称:')
        res = self.check_book(name)
        # 调用check_book方法,将返回值赋值给变量res
        if res == None:
        # 如果返回的是空值,即这本书的书名不在系统里
            print('没有这本书噢,你恐怕输错了书名~')
        else:
        # 如果返回的是实例对象
            if res.state == 0:
             # 如果实例属性state等于0,即这本书的借阅状态为'未借出'
                print('这本书没有被借走,在等待有缘人的垂青呢!')
            else:
             # 如果实例属性state等于1,即状态为'已借出'
                print('归还成功!')
                res.state = 0
                # 归还后书籍借阅状态为0,重置为'未借出'

3 去,成为强者

接下来的工作就是将所有的任务全部集成在一起!

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name    = name
        self.author  = author
        self.price   = price
        self.state   = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.price, status)
 
class FUNC_ALL:

    books = []
    def __init__(self):
        book1 = Booknew('PYTHON权威指南 ',  'TOMMI_WEI','100元。')
        book2 = Booknew('PYTHON绿皮书  ',  'TOMMI_WEI','100元')
        book3 = Booknew('PYTHON红宝书  ',  'TOMMI_WEI','100元',1)
        self.books.append(book1)
        self.books.append(book2)
        self.books.append(book3)
 
    def USER_INTERFACE(self):
        print('欢迎来到PYTHON的奇幻冒险世界。\n')
        while True:
            print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.all_in_book()
            elif choice == 2:
                self.add_in_book()
            elif choice == 3:
                self.lend_in_book()
            elif choice == 4:
                self.return_in_book()
            else:
                print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')
                break
 
    def all_in_book(self):
        print('书籍信息如下:')
        for book in self.books:
            print(book)
            print('')

    def add_in_book(self):
        new_name        =  input('请输入书籍名称:')
        new_author      =  input('请输入作者名称:')
        new_price       =  input('请输入书籍的价钱:')
        new_book        =  Booknew(new_name, new_author, new_comment)
        self.books.append(new_book)
        print('书籍录入成功!\n')

    def check_book(self,name):
        for book in self.books:
            if book.name == name:
                 return book 
        else:
            return None

    def lend_in_book(self):
        name = input('请输入书籍的名称:')
        KET = self.check_book(name)

        if KET != None:
            if KET.state == 1:
                print('你来晚了一步,这本书已经被借走了噢')
            else:
                print('借阅成功,借了不看会变胖噢~')
                KET.state = 1
        else:
            print('这本书暂时没有收录在系统里呢')
    
    def return_in_book(self):
        name = input('请输入归还书籍的名称:')
        KET = self.check_book(name)
        if KET == None:
            print('没有这本书噢,你恐怕输错了书名~')
        else:
            if KET.state == 0:
                print('这本书没有被借走,在等待有缘人的垂青呢!')
            else:
                print('归还成功!')
                KET.state = 0
 
manager = FUNC_ALL()
manager.USER_INTERFACE()

运行结果

1.查询所有书籍
2.添加书籍
3.借阅书籍
4.归还书籍
5.退出系统

请输入数字选择对应的功能:4
请输入归还书籍的名称:PYTHON绿皮书
没有这本书噢,你恐怕输错了书名~
1.查询所有书籍
2.添加书籍
3.借阅书籍
4.归还书籍
5.退出系统

请输入数字选择对应的功能:22
感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。

4 举一反三

利用类的继承,我们可以在创建一个子类。为了让大家更好的理解面向对象这个语言的特点,我们还需要做一些工作!
恳请大家在耐心一下,学会PYTHON对我们的帮助很大!

class Booknew:
 
    def __init__(self, name, author, price, state = 0):
        self.name = name
        self.author = author
        self.price = price
        self.state = state
 
# 创建一个Book类的子类 FictionBook

class FictionBook(Booknew):
    def __init__(self, name, author, price, state = 0, type = '虚构类'):
        Booknew.__init__(self, name, author, price, state = 0)
        #self.type = type

    def __str__(self):
        #status = '未借出'
        if self.state == 1:
            status = '已借出'
            return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.price, status)
        else:
            status = '未借出'
            return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.price, status)
            
        #return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.price, status)


book = FictionBook('PYTHON奇幻冒险记','TOMMI_WEI','100元')
print(book)

运行结果:

AttributeError: 'FictionBook' object has no attribute 'type'

大家知道是什么错误?现在是考验大家的时候了!如果大家可以现在改正这个问题,那就说明大家已经真正学会了PYTHON的类!这就是我们人生中的重大胜利!
大家发现错误的原因了?


class Booknew:
 
    def __init__(self, name, author, comment, state = 0):
        self.name = name
        self.author = author
        self.comment = comment
        self.state = state
 
# 创建一个Book类的子类 FictionBook

class FictionBook(Booknew):
    def __init__(self, name, author, comment, state = 0, type = '虚构类'):
        Booknew.__init__(self, name, author, comment, state = 0)
        self.type = type

    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.comment, status)


book = FictionBook('PYTHON红宝书','TOMMI_WEI','PYTHON奇幻冒险世界')
print(book)


运行结果!

class Booknew:
 
    def __init__(self, name, author, comment, state = 0):
        self.name = name
        self.author = author
        self.comment = comment
        self.state = state
 
# 创建一个Book类的子类 FictionBook

class FictionBook(Booknew):
    def __init__(self, name, author, comment, state = 0, type = '虚构类'):
        Booknew.__init__(self, name, author, comment, state = 0)
        self.type = type

    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.comment, status)


book = FictionBook('PYTHON红宝书','TOMMI_WEI','PYTHON奇幻冒险世界')
print(book)

5 最后一战

在上面的代码中添加一些变化!

class Booknew:
 
    def __init__(self, name, author, comment, state = 0):
        self.name = name
        self.author = author
        self.comment = comment
        self.state = state
 
    def __str__(self):
        status = '未借出'
        if self.state == 1:
            status = '已借出'
        return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
 
class BookManager:

    authors = []
    def __init__(self):
        book1 = Booknew('PYTHON红宝书',  'tommi','适合初学者')
        book2 = Booknew('PYTHON绿皮书',  'tommi','能力提升')
        book3 = Booknew('PYTHON权威指南', 'tommi','权威指南')
        self.books = [book1,book2,book3]
        self.authors.append(book1.author)
        self.authors.append(book2.author)
        self.authors.append(book3.author)
 
    def menu(self):
        while True:
            print('1.查询书籍')
            choice = int(input('请输入数字选择对应的功能:'))
            if choice == 1:
                self.show_author_book()
            else:
                print('感谢使用!')
                break
 
    def show_author_book(self):
        author = input('请输入想查询作家的名称:')
        if author in self.authors:
            print(author + '的作品有:')
            for book in self.books:
                if book.author == author:
                    print(book)
        else:
            print('很可惜,我们暂时没有收录这位作者的作品')

manager = BookManager()
manager.menu()   

运行结果就不给大家展示出来了!希望大家自己也能动手敲一下代码!这样影响会更加深刻一些!
其实我们很多人都有学习上的误区!以为看会了,就是明白了!然而自己动手尝试一下就知道,自己还差的很远!
Tommi Wei 是我的英文名,同样我也是一个CSDN家庭中的一员,我希望可以给大家多分享一些有用的知识,与大家一起进步!即使这样会花费我很多的时间与精力,但是我还是觉得,既然已经坚持了下来,就要做好!把文章写好,才能帮助更多的人!而不是想着如何去赚钱!
同样,也希望大家有问题可以提出来!相信自己!加油!

2021/04/06
Tommi Wei

猜你喜欢

转载自blog.csdn.net/weixin_46259642/article/details/115430217