Python编程逻辑思维巩固案例

Python编程逻辑思维巩固案例,第1张

book.py

import os
import pickle


class Book(object):
    def __init__(self, num, name, position):
        self.num = num
        self.name = name
        self.position = position

    def __str__(self):
        return f"{self.num}\t{self.name}\t{self.position}"


class BookManage(object):
    book_list = []

    # __init__ 方法在对象被初始化的时候,自动执行
    def __init__(self):
        "加载文件到内存"
        # 如果文件不存在,就创建一个文件
        if not os.path.isfile("book.data"):
            pickle.dump(self.book_list, open("book.data", "wb"))

        self.book_list = pickle.load(open("book.data", "rb"))

    # 实现num自增的方法
    @property
    def last_book_id(self):
        "如果book_list是空,返回0,否则返回最后一本书的num值"
        if self.book_list:
            last_book = self.book_list[-1]  # 获得最后一本书
            return last_book.num  # 返回最后一本书的num
        return 0

    def show_book(self):
        "显示所有图书"
        for book in self.book_list:
            print(book)

    def add_book(self, book: Book):
        "新增书籍"
        self.book_list.append(book)

    def del_book(self, book: Book):
        "删除书籍"
        pass

    # __del__在对象被销毁的时候自动执行
    def __del__(self):
        "把内存中的数据保存到文件"
        pickle.dump(self.book_list, open("book.data", "wb"))

mian.py

from book import Book, BookManage


def welcome():
    print("*******欢迎进入图书管理系统*******")
    print("1.显示所有图书")
    print("2.添加图书")
    print("3.删除图书")
    print("4.查找图书")
    print("5.退出")
    print("******************************")


def get_choose_number():
    "获取用户输入的菜单编号"
    choose_number = input("请输入菜单编号:")
    # 如果编号不是数字或者不是菜单上有的数字,返回-1
    if not choose_number.isdigit() or choose_number not in ["1", "2", "3", "4", "5"]:
        return -1
    return int(choose_number)


def main():
    bm = BookManage() #创建一个用来管理图书的对象
    while True:
        welcome() #显示菜单
        number = get_choose_number()# 获得使用者输入的菜单编号

        if number == -1:
            print("编号输入有误,请输入正确的数字")
            continue

        if number == 1:
            bm.show_book()
        elif number == 2:
            book_name = input("请输入书名:")
            book_position = input("请输入位置:")
            # 创建一个对象--具体的书
            book = Book(bm.last_book_id + 1,book_name,book_position)
            bm.add_book(book)

        elif number == 3:
            pass
        elif number == 4:
            pass
        else:
            break


if __name__ == '__main__':
    main()

其中在__init__和__del__方法里实现了序列化和反序列化。



python序列化

import pickle

li = [1,2,3]
pickle.dump(li,open("demo.data","wb"))

就是把python的对象(li)转换成字符串文件(demo.data)


python反序列化

import pickle

l = pickle.load(open("demo.data","rb"))
print(l)

就是把字符串文件(demo.data)转换成python的对象(l)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存