函数的定义,列表推导式及书籍管理系统升级版

98 阅读3分钟

一.函数的定义:

1.函数作用:

在一组程序中,有些代码会重复使用,我们就可以通过使用函数将之前写好的代码调用

2.定义函数的格式:

def 函数名([参数,......]):     # 参数可有可无  写参数的时候可以写多个,()是必须有的
    代码

函数名:例如,get_name()

例子:

写一个可以随机生成四位数验证码的函数
def get_name():
    a = 'fjolaiefjwoief54755475454565'
    b = ''
    for i in range(4):
        c = random.choice(a)
        b += c
    print(b)
    

print(get_name)  #  打印结果---->   <function get_name at 0x0000017750CF3E20>  -------> 函数的地址

# 验证  调用:执行函数中代码
get_name()   # 输出结果-----> 545a

二.列表推导式:

列表推导式最后得到是一个列表。

1.格式:

第一种:

   [i for i in 可迭代的数据]    可迭代的数据:for可以取得到的数据,例如列表,字典,元组。

    前面的i就是把后面的i取到的元素存起来,每取一次就存一次,结束后就放入列表中。
例子:

list1 = [i for i in range(1, 21)]
print(list1)    # 打印结果 --->  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
list2 = [i + 2 for i in range(1, 10)]
print(list2)    #  打印结果 ----->  [3, 4, 5, 6, 7, 8, 9, 10, 11]

第二种:

       [i for i in 可迭代的数据 if 条件]

       前面的i 会根据条件选择性地存入后面的 i 的取值
例子:

# 打印0到100之间的偶数

list2 = [i for i in range(0, 101) if i % 2 == 0]

print(list2)  # 打印结果 ----> [0, 2, 4, 6, ......., 100]

第三种:

    [结果1 if 条件 else 结果2 for 变量 in 可迭代的数据]
例子:

# 将1到10中的奇数变成偶数

list3 = [i if i % 2 == 0 else i + 1 for i in range(1, 10)]

print(list3)  # 打印结果 ---->  [2, 2, 4, 4, 6, 6, 8, 8, 10]

三.书籍管理系统升级版:

要求:

图书管理系统:

创建一个放有书籍的书架library,每本书都有书名,作者,数量的信息。 

每次借书还书,其书架上的数量都会发生变化。

功能:
    1.借书 
    2.还书
    3.查询(可以根据 书名/作者 查询)
    4.查看所
    5.退出
    
    


flge = True
n = -1                                 # 记录下标,来定位所需书籍位置
library = [{'书名': '西游记', '作者': '吴承恩', '数量': 100}, {'书名': '水浒传', '作者': '施耐庵', '数量': 50},
           {'书名': '三国演义', '作者': '罗贯中', '数量': 100}, {'书名': '红楼梦', '作者': '曹雪芹', '数量': 100}]                      # 创建书架
ku = []                                # 创建一个书本数量原始数据的库
for g in library:
    ku.append(g['数量'])                # 将书本数量原始数据存入库中
while flge:
    a = int(input('请选择功能:1.借书 2.还书 3.查询 4.查看所有书籍 5.退出'))
    if a == 1:
        print('进入借书模块')
        b = input('请输入书名或作者:')
        for i in library:  # 在书架将书依次取出并与所需书籍对比
            c = list(i.values())
            n += 1
            e = ku[n]               # 载入原始数量数据
            if b in c:
                d = int(input('您要借几本:'))
                if d < e:
                    i['数量'] -= d
                    library[n] = i
                    n = -1              # 将下标归位,以便在接下来的操作中使用
                    print('借书成功')
                    break
                else:
                    print('对不起,您需要的数量已超过书架拥有的数量')
                    n = -1               # 同上
                    break
        else:
            print('您所要输入的书名或作者不在书架内,请重新输入')
    elif a == 2:
        print('进入还书模块')
        b = input('请输入书名或作者:')
        for j in library:                  # 同上
            c = list(j.values())
            n += 1
            e = ku[n]                   # 同上
            if b in c:
                d = int(input('您要还几本:'))
                j['数量'] += d
                library[n] = j
                n = -1
                print('还书成功')
                if j['数量'] > e:
                    j['数量'] = e
                break
        else:
            print('您所要输入的书名或作者不属于本书架')
    elif a == 3:
        print('欢迎进入查询模块')
        f = input('请输入书名或作者')
        for m in library:
            if f in list(m.values()):
                print('{}{}{}'.format('书名'.center(10), '作者'.center(10), '数量'.center(10)))
                print(i['书名'].center(10), end='')
                print(i['作者'].center(10), end='')
                print(str(i['数量']).center(10), end='')
                print()
            else:
                print('您所要输入的书名或作者不在书架内,请重新输入')
    elif a == 4:
        print('{}{}{}'.format('书名'.center(10), '作者'.center(10), '数量'.center(10)))
        for i in library:
            print(i['书名'].center(10), end='')
            print(i['作者'].center(10), end='')
            print(str(i['数量']).center(10), end='')
            print()
    else:
        flge = False