测试开发进阶系列课程

1.完善程序思维--------案列:图书管理系统的创建

(一)图书管理系统的创建

1.在main中写入主函数,主功能
![在这里插入图片描述](https://img-blog.csdnimg.cn/e0c08545dd324bc49bf031e2c99e73e3.png

'''
思考步骤:
    1.要做个图书管理系统先考虑他的界面进入,导航栏目条线写一个welcome方法
    2.在写一个主函数运行的选项 main方法
    3.要运行就要用户输入,在运行前线进行输入写一个get_choose_numeber方法
'''

#1
def welcome():
    print("*************************欢迎进入图书管理系统********************")
    print("1.显示所有图书\n2.添加图书\n3.删除图书\n4.查找图书\n5.退出")
    print("****************************************************************")



#3
def  get_choose_number():
    "获得用户输入的菜单编号"
    choose_number = input("请输入菜单编号:")# input输入返回的是一个str;所以要转化为num需要做一个强制转化


    #做个判断;如果编号不是数字  或者 不是 1,2,3,4,5 返回 -1
    #判断是否要转换,isdigit会自动判断返回的是不是数字,不是返回-1;是的话返回输入的数字,并用int把str类型转化成num类型
    if not choose_number.isdigit() or choose_number not in ["1","2","3","4","5"]:
        return -1
    return int(choose_number)


#2
def main():
    while True:
        # 写了了2的判断这就可以开始调用了
        welcome()
        number = get_choose_number()
        if number == -1:
            print("输入有误,请重新输入")
            continue

        if number ==1:
            pass
        elif number ==2:
            pass
        elif number ==3:
            pass
        elif number == 4:
            pass
        else:
            break

if __name__ == '__main__':
    main()

在这里插入图片描述

在这里插入图片描述

思考逻辑
在这里插入图片描述

2.在book中写入要达成的book目的

''''
init:
初始化方法(即__init__方法)是Python中的一种特殊方法,它用于在创建类的新实例时初始化该实例的属性。

在类中定义初始化方法后,当我们创建该类的新实例时,Python会自动调用该方法,并将实例本身(即self)作为第一个参数传递给它。这使我们可以使用self来访问实例的属性,并将它们初始化为特定的值。

例如,如果我们有一个表示图书的类,我们可以使用初始化方法来初始化该类实例的属性,例如书的名称,作者,出版日期等。

初始化方法的好处是可以在创建对象时为其属性提供默认值,也可以让我们传递参数来初始化对象的属性。这样,在创建对象时就不需要手动为每个属性设置初始值了。这样可以让代码更加简洁和易于维护。

因此,初始化方法是一种非常有用的方法,它使我们能够轻松地初始化类的实例,并在实例化时提供自定义属性值。

boject:
在Python中,所有的类都是从object类继承而来的。object是Python中的一个基类,它定义了所有类共有的一些基本属性和方法。在Python3中,即使没有显式继承object,Python也会默认地将所有类看作是从object类继承而来的。

object类的作用包括以下几个方面:

提供默认的构造函数:在Python中,如果一个类没有显式定义__init__方法,Python会自动提供一个默认的构造函数,它来自object类。

提供一些基本的魔术方法:例如__new__、del、__repr__等。这些魔术方法是Python中的一些特殊方法,它们可以在类的实例化、删除、打印等过程中自动调用,从而方便我们进行一些特殊的操作。

提供一些基本的方法和属性:例如__class__、doc、hash、__str__等。这些方法和属性都是从object类继承而来的,它们可以用于获取类的信息、实例的信息等。

因此,object类是Python中非常重要的一个基类,它为所有类提供了一些基本的属性、方法和行为,使得我们可以更加方便地进行类的定义和使用。

'''


# 1.写一个书的类,包含3个属性,编号,名字,位置
class Book(object):
    def __init__(self, num, name, position):
        self.num = num
        self.name = name
        self.position = position

    '''
    这是一个Python类中的特殊方法__str__,它用于将对象转换为字符串形式。
    
    当我们使用print函数打印一个对象时,Python会自动调用该对象的__str__方法来将对象转换为字符串,然后打印出来。
    
    在这个特定的方法中,self代表当前实例对象,可以使用self来访问实例的属性。在这个方法中,它返回了一个包含实例属性的字符串,其中{book.num}、{book.name}和{book.position}是字符串格式化表达式,用于获取该实例的num、name和position属性的值,并将它们放入字符串中。
    
    例如,如果我们有一个Book类的实例对象book,当我们使用print(book)时,Python会自动调用该对象的__str__方法,并返回一个包含num、name和position属性值的字符串。因此,我们可以使用以下代码来打印该对象的属性值:
    '''

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


class BookManage(object):
    book_list = []

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

    def add_book(self,book:Book):   #book:Book   book是变量,Book是类型; python3的新语法,在某个变量中添加新的类型,这个类型是Book;  作用看代码更明白 这是个Book类型
        """原来书单里面是空的book_lis,需要在里面添加一些书"""
        self.book_list.append(book)


#其他关于  变量 : 类型 的列子

# def f1(s:str):
#     return s.lower()
#
# def f2(s):
#     return s.
# 本页运行,如果你的脚本名字倍主函数运行赋值,可以在本页脚本运行
if __name__ == '__main__':
    book = Book(1, "边城浪子", "1号架2层")
    print(book)

在book中书写的代码
在这里插入图片描述
优化后的book代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)再去main里面写添加图书和显示图书的调用逻辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行查看
(1)最开始输入1的时候还是显示全部的编号,因为还没有 开始增加图书
在这里插入图片描述

(2)输入2进行增加图书

在这里插入图片描述
在这里插入图片描述

'''
思考步骤:
    1.要做个图书管理系统先考虑他的界面进入,导航栏目条线写一个welcome方法
    2.在写一个主函数运行的选项 main方法
    3.要运行就要用户输入,在运行前线进行输入写一个get_choose_numeber方法



'''

# 1
from dev_01day.book import Book, BookManage


def welcome():
    print("*************************欢迎进入图书管理系统********************")
    print("1.显示所有图书\n2.添加图书\n3.删除图书\n4.查找图书\n5.退出")
    print("****************************************************************")


# 3
def get_choose_number():
    "获得用户输入的菜单编号"
    choose_number = input("请输入菜单编号:")  # input输入返回的是一个str;所以要转化为num需要做一个强制转化

    # 做个判断;如果编号不是数字  或者 不是 1,2,3,4,5 返回 -1
    # 判断是否要转换,isdigit会自动判断返回的是不是数字,不是返回-1;是的话返回输入的数字,并用int把str类型转化成num类型
    if not choose_number.isdigit() or choose_number not in ["1", "2", "3", "4", "5"]:
        return -1
    return int(choose_number)


# 2
def main():
    bm = BookManage()  # 创建一个用来管理图书的对象叫做bm
    while True:
        # 写了了2的判断这就可以开始调用了
        welcome()
        number = get_choose_number()
        if number == -1:
            print("输入有误,请重新输入")
            continue
        if number == 1:
            bm.show_book()
        elif number == 2:
            num = input("请输入书的编号:")
            book_name = input("请输入书名:")
            book_position = input("请输入位置:")

            # 创建一个对象---具体的书
            book = Book(num, book_name, book_position)
          #  print(book)
            bm.add_book(book)
         

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


if __name__ == '__main__':
    main()

这里犯了一次错误在BookMange中的show_book没有在print打印具体的书print(book)导致,在main中运行了2后再运行1不会显示书名。

  1. init 与 __del__使用
    (1)init 与 __del__使用
    5
    (2)pickle包、处理方式前置处理(判断)、后置处理(捕获)
    在这里插入图片描述

#表现形式1

# class Book(object):
#     def __init__(self,num,name,position):
#         self.num = num
#         self.name = name
#         self.position = position
#
#
# if __name__ == "__main__":
#    book = Book(1,"边城浪子","南区")
#    print(f"{book.name}\t{book.position}")
#

#更优雅的方式
import os.path
import pickle


class Book(object):

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

#总结:
#1.在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
#2.当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据,如果不加就会显示内存地址人眼是看不懂的
#3.https://blog.csdn.net/diessjack/article/details/100008025?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-100008025-blog-82110661.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=2
    def __str__(self):
        return f"{book.name}\t{book.position}"


class BookManage(object):
    book_list = []

    def __init__(self):
        """加载摁键到内容"""
        #_init__在对象被初始化时自动执行。
        print("数据文件正在被加载")

        #把对象保存到文件
        #pickle默认包,可以将一个对象保存到文件中
      #  pickle.dump(self.book_list,open("book.data","wb"))

        #将一个对象加载到文件中

        #判断文件book.data是否存在,不存在创建一个;(1)加判断处理
        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"))
        #开始时没有book.data这个文件,没把发加载灰报错
        #方法:(1)加判断  (2)异常处理

        #方法2:异常处理
        # try:
        #     self.book_list = pickle.load(open("book.data", "rb"))
        # except FileNotFoundError as e:
        #     print("文件不存在")
        #     pickle.dump(self.book_list, open("book.data", "wb"))
        #     print("文件创建成功")


    def show_book(self):
        """显示所有图书"""
        for book in self.book_list:
            print(book)
    #对某个变量限定类型
    def add_book(self,book:Book):
        self.book_list.append(book)

    #  @property可以将方法转化为属性,后面调用这个方法可以不用()
    @property
    def last_book_id(self):
        '''如果book_list是空,返回0,否则返回最后一本书的num值'''
        if self.book_list:
            last_book = self.book_list[-1].num  # 获得list中最后一本书
            return last_book.num #返回书的num属性
        return 0

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

if __name__ == "__main__":
   book = Book(1,"边城浪子","南区")
   print(book)```

2.推导式

(一)推导式基础-格式

在这里插入图片描述

推导式用法
在这里插入图片描述

对字典进行解析
在这里插入图片描述
在这里插入图片描述





def test_derivation():
    """
    推导式格式
    [处理迭代中的每一个元素 for 语句  条件判断]
    :return:
    """

    #返回 1-100所有偶数 【2,4,6,8,10......100】

    #一般式
    # result = []
    # for i in range(1,101):
    #     if i % 2 == 0:
    #         result.append(i)
    # print(result)
    #
    #
    # #推导式
    #
    # print([i for i in range(1,101) if i % 2 == 0]) #列表推导式,列表解析
    #
    # print(["第" + str(i) + "题" for i in range(1, 10) if i % 2 == 0])  # 列表推导式,列表解析


    #用于解析字典
    cookie = """connect.sid=s%3AB91kRQ6tUx1dI2H4qdR8gz0_X0AZPhDe.SkKiNEGvyilGhmtMOawyjs4Ot%2BbFFRqDjqA67vVksZ0; SECKEY_ABVK=cYxAso/5Lw4VHHqA053zf3aSI21XQiN6BxVdsS98AEM%3D; BMAP_SECKEY=cYxAso_5Lw4VHHqA053zfzVjM6k0V-CXTtuF4EtczmsRZ4BL11TWdW12w2HV2X1mmqPnpiyDEWXu6LZ6C_xzSGCMgm1_j7FcxvirgWMwgacpe_AjVVh1Ebk24tU1NWszxkoh22Af4pylAHkMJz7snn07JSRbAjKT35s-YSxMK-3DZccxzj-vjFcq3tYCBbXE; JSESSIONID=012DF6FE8CBC2B110824243C6BF308E5"""
    #cookie 新格式: {键1:值1 , 键2:值2 ......}
    new_cookie = {}
    for item in cookie.split(';'): #先用: 分割cookie
        s = item.split('=') #用= 分割
        new_cookie[s[0]] = s[1] # =左边作为键,=右边作为值,添加到new_cookie字典中
    print(new_cookie)#输出 new_cookie

    #推导式
    print({item.split('=')[0]: item.split('=')[1] for item in cookie.split(';')})

if __name__ == '__main__':
    test_derivation()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值