day03 Python基础

课程目标:掌握Python基础中的必备语法知识

课程概要:

  • 循环语句
  • 字符串格式化
  • 运算符(面试题)

1. 循环语句

  • while循环

  • for循环(后期)

    while 条件:.........print(456)
    

1.1 循环语句基本属于

示例1:

print('开始')
while True:print('alex 是个小逗比')
print('结束')输出:
开始
alex 是个小逗比
alex 是个小逗比
alex 是个小逗比
....

示例2:

print('开始')
while 1 > 2:print('如果祖国遭受到侵犯,热血男儿当自强。')
print('结束')输出:
开始
结束

示例3:

data = True
print('开始')
while data:print('如果祖国遭受到侵犯,热血男儿当自强。')
print('结束')输出:
开始
如果祖国遭受到侵犯,热血男儿当自强。
如果祖国遭受到侵犯,热血男儿当自强。
如果祖国遭受到侵犯,热血男儿当自强。
...

示例4:

print('开始')
flag = True
while flag:print('滚滚黄河, 滔滔长江。')flag = False
print('结束')输出
开始
滚滚黄河, 滔滔长江。
结束

示例5:

print('开始')
num = 1
while num < 3:print('滚滚黄河, 滔滔长江。')num = 5print('结束')输出
开始
滚滚黄河, 滔滔长江。
结束

示例6:

print('开始')
num = 1
while num < 5:print('给我生命,给我力量')num += 1  # 相当于更新numprint('结束')输出
开始
给我生命,给我力量
给我生命,给我力量
给我生命,给我力量
给我生命,给我力量
结束
练习题:重复3次输出我爱我的祖国
print('开始')
n = 0
while n < 3:print('我爱我的祖国')n += 1print('结束')

1.2 综合小案例

请实现一个用户登录系统,如果密码错误则反复提示用户重新输入,直到输入正确,才退出。

print('开始运行路飞系统')
flag = True
while flag:username = input('请输入用户名:')pwd = input('请输入用户密码:')if pwd == '123' and username == 'liuxiaowei':print('登录成功!')flag = Falseelse:print('用户名或密码错误')

练习题

  1. 补充代码实现
    猜数字,设定一个理想数字比如:66,一直提示用户输入数字,如果比66大,则显示猜测的结果大了;如果比66小,则显示猜测的结果小了;只有输入等于66,显示猜测结果正确,然后退出循环。
print('猜数字游戏开始!')
flag = True
try:while flag:num = input('请输入猜测的数字:')num = int(num)if num > 66:print('大了')elif num < 66:print('小了')else:print('猜对了')flag = Falseprint('游戏结束')
except:print('请输入数字!')
  1. 使用循环输出1-100所有整数
print('输出1-100')
n = 1
while n <= 100:print(n, end=' ')if n == 50:print(f'\n{n}',end=' ')n += 1
  1. 使用循环输出 1 2 3 4 5 6 8 9 10,即10以内除7以外的整数
print('输出10以内除7之外的整数')
n = 1while n < 10:if n != 7:print(n)n += 1
  1. 输出1-100内的所有偶数
print('1-100内偶数')n = 1
while n <= 100:if n % 2 == 0:print(f'偶数-{n}')n += 1
  1. 输出1-100内所有奇数
print('1-100以内奇数')
n = 1
while n <= 100:if n % 2 == 1:print(f'奇数-{n}')n += 1
  1. 输出1-100内的所有整数和
print('1-100整数和')
n = 1
sum = 0
while n <= 100:sum += nn += 1print(f'1-100整数和:{sum}')

7.输出10-1的所有整数

print('10-1所有整数')
n = 10
while n >= 1:print(n)n -= 1

1.3 break

break, 用于在while循环中帮助你终止循环。

print('开始')
while True:print('1')break  # 终止循环print('2')
print('结束')输出:
1
结束

通过示例来更深入理解break的应用

示例1

print('开始')
while True:print('红旗飘飘,军号响。')breakprint('剑已出鞘, 电闪雷鸣。')print('从来都是狭路相逢勇者胜。')
print('结束')输出:
开始
红旗飘飘,军号响。
结束

示例2

print('开始')
i = 1
while True:print(i)i += 1if i == 101:break
print('结束')输出:
开始
1
2
3
...
100
结束

示例3

print('开始运行系统')
while True:user = input('请输入用户名:')pwd = input('请输入密码:')if user == 'liuxiaowei' and pwd == 'oldboy':print('登录成功')breakelse:print('用户名或密码错误,请重新登录')
print('系统结束')输出
开始运行系统
>>> 用户名
>>> 密码
正确,登录成功
系统结束不正确,一直循环

所以,以后写代码的时候,想要结束循环可以通过两种方式实现,即:条件判断和break关键字,两种在使用时无好坏之分,只要能实现功能就行。

1.4 continue

Continue,在循环中结束本次循环,开始下一次循环

print('开始')
while True:print(1)continueprint(2)
print('结束')输出:
开始
1
1
1
1
1
1
...

示例1

print('开始')
while True:print('红旗飘飘,军号响。')continueprint('剑已出鞘, 电闪雷鸣。')print('从来都是狭路相逢勇者胜。')
print('结束')输出:
开始
红旗飘飘,军号响。
红旗飘飘,军号响。
红旗飘飘,军号响。
红旗飘飘,军号响。
...

示例2

print('开始')
i = 1while i < 101:if i == 7:i += 1continueprint(i)i += 1print('结束')输出
开始
1
2
3
...
8
9
100
结束

示例3

print('开始')
i = 1while i < 101:if i == 7:i += 1continueprint(i)i += 1if i == 101:breakprint('结束')输出
开始
1
2
3
...
8
9
100
结束

写在最后,对于break和continue都是放在循环语句中用于控制循环过程的,一旦遇到break就停止所有循环,一旦遇到continue 就停止本次循环,开始下次循环。

1.5 while else

当while后的条件不成立时,else中的代码就会执行。

while 条件:代码
else:代码
while False:pass
else:print(123)
num = 1
while num < 5:print(num)num += 1
else:print(666)输出
1
2
3
4
666
while True:print(123)break
else:print(666)输出
123

2. 字符串格式化

字符串格式化,使用更便捷的形式实现字符串的拼接。

2.1 %

2.1.1 基本格式化操作

name = '刘小伟'
# 占位符
text = '我叫%s,今年49岁' %'刘小伟'
text = '我叫%s,今年49岁' %name
name = '刘小伟'
age = 18text = '我叫%s, 今年%s岁' %('刘小伟', 49)
text = '我叫%s, 今年%s岁' %(name, age)text = '我叫%s, 今年%d岁' %(name, age)
text = text = '我叫%s, 今年%d岁' %('刘小伟', 49)
message = '%s你什么时候过来呀?Alex今天不在家' %'死鬼'
message = '%(name)s你什么时候过来呀?Alex今天不在家' %{'name':'死鬼'}
message = '%(name)s你什么时候过来呀?%(person)s今天不在家' %{'name': '死鬼', 'person': 'Alex'}

2.1.2 百分比

text = '兄弟, 这个片我已经下载了90%了,居然特么断网了。'
print(text)
text = '%s, 这个片我已经下载了90%了,居然特么断网了。' %'兄弟'
print(text)Traceback (most recent call last):File "/Users/liuxiaowei/PycharmProjects/路飞全栈/day03/百分号格式化.py", line 5, in <module>text = '%s, 这个片我已经下载了90%了,居然特么断网了。' % '兄弟'
TypeError: not enough arguments for format string90% 当作占位符了# 解决办法
text = '%s, 这个片我已经下载了90%%了,居然特么断网了。' %'兄弟'
print(text)

一旦字符串格式化中出现百分比的显示,请一定要添加%%以实现输出%

2.2 format

text = '我叫{0}, 今年{1}岁'.format('刘小伟', 49)
print(text)
text = '我叫{0}, 今年{1}岁,真实的姓名是{0}'.format('刘小伟', 49)
print(text)
我叫刘小伟, 今年49岁,真实的姓名是刘小伟
text = '我叫{0}, 今年{1}岁,真实的姓名是{2}'.format('刘小伟', 49, '李小龙')
print(text)
我叫刘小伟, 今年49岁,真实的姓名是李小龙
text = '我叫{}, 今年49岁'.format('刘小伟')text = '我叫{}, 今年{}岁'.format('刘小伟', 49)text = '我叫{}, 今年{}岁, 真实姓名{}'.format('刘小伟', 49, '刘小伟')
text = '我叫{n1}, 今年49岁'.formta(n1='刘小伟')text = '我叫{n1}, 今年{age}岁'.formta(n1='刘小伟', age=49)text = '我叫{n1}, 今年{age}岁, 真实的姓名{n1}'.formta(n1='刘小伟', age=49)
text = '我叫{0}, 今年{1}岁'
data1 = text.format('刘小伟', 49)
data2 = text.format('Alex', 73)
text = '我叫%s, 今年%d岁'
data1 = text %('刘小伟', 49)
data2 = text %('Alex', 73)

2.3 f

到Python3.6版本,更便捷。

name = '嫂子'
action = '跑步'
text = f'{name}喜欢{action}, 跑完之后满身大汗'
name = '喵喵'
age = 19
text = f'嫂子的名字叫{name},今年{age}岁'
print(text)
text = f'嫂子的名字叫喵喵,今年{19+2}岁'
print(text)
text = f'嫂子的名字叫喵喵,今年{19+2=}岁'
print(text)
# 进制转换
v1 = '嫂子今年{22}岁'
print(v1)v1 = f'嫂子今年{22:#b}岁'  # 二进制
print(v1)
v2 = f'嫂子今年{22:#o}岁'  # 八进制
print(v2)
v3 = f'嫂子今年{22:#x}岁'  # 十六进制
print(v3)输出:
嫂子今年0b10110岁
嫂子今年0o26岁
嫂子今年0x16岁
name = 'alex'
name = f'我是{name},  我爱大铁锤'
name = f'我是{name.upper()}, 我爱大铁锤'
print(name)

3. 运算符

  • 算数运算符,例如:加减乘除
运算符 描述 实例
+ 加 - 两个对象相加 a + b输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b输出结果为200
/ 除 - x 除以 y b/a输出结果为2
% 取模 - 返回除法的余数 b % a输出结果0
** 幂 - 返回x的y次幂 a ** b为10的20次方,输出结果为10000000000000000000000
// 取整除 - 返回商的整数部分 9 // 2 输出结果为4,9.0 // 2.0 输出结果为 4.0
print( 9 // 2)
  • 赋值运算符, 例如:变量赋值
运算符 描述 实例
= 简单的赋值运算符 c = a + b将 a + b的运算结果赋值为c
+= 加法赋值运算符 c += a 等效 c = c + a
-= 减法赋值运算符 c -= a 等效 c = c - a
*= 乘法赋值运算符 c *= a 等效 c = c * a
/= 除法赋值运算符 c /= a 等效 c = c / a
%= 取模赋值运算符 c %= a 等效 c = c % a
**= 幂值赋值运算符 c **= a 等效 c = c ** a
//= 取整赋值运算符 c //= a 等效 c = c // a
num = 1
while num < 100:print(num)num += 1
  • 比较运算符, 例如:大于、小于
运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b)返回False
!= 不等于 - 比较两个对象是否不相等 (a != b)返回True
<> 不等于 - 比较两个对象是否不相等 (a <> b)返回True, 这个运算符类似!=
> 大于 - 返回x是否大于y (a > b)返回False
< 小于 - 返回x是否小于y (a < b)返回True
>= 大于等于 - 返回x是否大于等于y (a >= b)返回False
<= 小于等于 - 返回x是否小于等于y (a <= b)返回True

注意:Python3不支持<>

if 1 > 2:pass
while 1 > 2:passdata = 1 == 2
  • 成员运算,例如:是否包含
运算符 描述 实例
in 如果在指定的序列中找到值返回True, 否则返回False x 在y序列中,如果x在y序列中返回True
not in 如果在指定的序列中没有找到值返回True,否则返回False x不在y序列中,如果x不在y序列中返回True
v1 = 'le' in 'alex'  # True/False
# 让用户输入一段文本,检测文本中是否包含敏感词
text = input('请输入内容:')
if '苍老师' in text:print('少儿不宜')
else:print('text')
  • 逻辑运算,例如:且或非 and 、or、 not
运算符 描述 实例
and 布尔’与’ - 如果x为False, x and y 返回False,否则它返回y的计算值 (a and b)返回True
or 布尔’或’ - 如果x是True, 它返回True,否则返回y的计算值 (a or b) 返回True
not 布尔’与’ - 如果x为True, 它返回False,如果x为False,它返回True not(a and b)则返回False
if username == 'alex' and pwd == '123':passdata = 1 > 2
if not data:pass

3.1 运算符优先级

运算符的优先级有很多,常见的没几个,推荐你记住3个即可:

  • 算数优先级大于比较运算符

    if 2 + 10 > 11:print('True')
    else:print('False')
    
  • 比较运算符优先级大于逻辑运算符

    if 1 > 2 and 2 < 10:print('成立')
    else:print('不成立')
    
  • 逻辑运算符内部三个优先级 not > and > or

    if not 1 and 1 > 2 or 3 == 8:print('True')
    else:print('False')
    

上述这3个优先级从高到低总结:加减乘除 > 比较 > not and or 。绝招:加括号

3.2 面试题

逻辑运算: and or

v1 = name == 'alxex' and pwd = '123'
# v1 = True and Falseif name == 'alex' and pwd == '123':pass
v2 = 'liuxiaowei' and 'alxex'# 第一步:将and 前后的值转换为布尔值 True and True
# 第二步:判断本次操作取悦于谁?由于前面的是True,所以本次逻辑判断取决于后面的值
# 所以,后面的值等于多少最终结果就是多少。 v2 = 'alex'v3 = '' and 'alex'# 第一步:将and 前后的值转换为布尔值 False and True
# 第二步:判断本次操作取悦于谁?由于前面的是True,所以本次逻辑判断取决于前面的值
# 所以,后面的值等于多少最终结果就是多少。 v3 = ''v4 = 1 or 8
# 第一步:将or前后的值转换为布尔值 True or True
# 第二步:判断本次操作取悦于谁?由于前面的是True,所以本次结果取决于前面值
# 所以v4 =1v5 = 0 or 8
# 第一步:将or前后的值转换为布尔值 False or True
# 第二步:判断本次操作取悦于谁?由于前面的是False,所以本次结果取决于后面值
# 所以v5 = 8

练习题

v1 = 1 or 2
v2 = -1 or 3
v3 = 0 or -1
v4 = 0 or 100
v5 = '' or 10
v6 = 'liuxiaowie' or ''
v7 = 0 or ''
print(v1, v2, v3, v4, v5, v6, v7)# 输出
1
-1
-1
100
10
liuxiaowei
""注意:or看第一个值是True不用看后面了,结果就是第一个值。否则结果就是第二个值
v1 = 4 and 8
v2 = 0 and 6
v3 = -1 and 88
v4 = '' and 7
v5 = 'liuxiaowei' and ''
v6 = '' and 0
v7 = 0 and '中国'
print(v1, v2 , v3, v4, v5, v6, v7)# 输出
8
0
-1
""
liuxiaowei
0
0注意:第一个值如果是True,结果就是第二个值,否则也是第一个值

面试题

如果多个and 和or的情况,先计算and再计算or

v1 = 0 or 4 and 3 or 7 or 9 and 60 or 3 or 7 or 9 and 60 or 3 or 7 or 63 or 7 or 63 or 63v2 = 8 or 3 and 4 or 2 and 0 or 9 and 78 or 4 or 0 or 78 or 0 or 78 or 78v3 = 0 or 2 and 3 and 4 or 6 and 0 or 30 or 3 and 4 or 0 or 30 or 4 or 0 or 34 or 0 or 34 or 34# 输出
3
8
4

先计算not,再计算and,最后计算or

v4 = not 8 or 3 and 4 or 20 or 3 and 4 or 20 or 4 or 24 or 24# 输出
4

总结

  1. while循环语句
  2. break和continue 关键字的作用
  3. 三种字符串格式化的方式
  4. 基本运算符(逻辑运算涉及的相关面试题)

今日作业

  1. 判断下列逻辑语句的True,False

    1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
    # 解体步骤, 比较运算符优先级大于逻辑运算符
    # 0 代表False 1代表True
    '''
    0 or 1 or 0 and 1 and 1 or 0
    0 or 1 or 0 and 1 or 0
    0 or 1 or 0 or 0
    1 or 0 or 0
    '''
    not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6'''
    not 1 and 1 or 0 and 1 and 1 or 0
    0 and 1 or 0 and 1 and 1 or 0
    0 or 0 and 1 or 0
    0 or 0 or 0
    0
    '''
    # 输出True
    False
  2. 求出下列逻辑语句的值

    8 or 3 and 4 or 2 and 0 or 9 and 7
    0 or 2 and 3 and 4 or 6 and 0 or 3# 输出
    8
    4
    
  3. 下列结果是什么?

    6 or 2 > 1
    3 or 2 > 1
    0 or 5 < 4
    5 < 4 or 3
    2 > 1 or 6
    3 and 2 > 1
    0 and 3 > 1
    2 > 1 and 3
    3 > 1 and 0
    3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2# 输出
    6
    3
    False
    3
    True
    True
    0
    3
    0
    2
    
  4. 实现用户登录系统,并且要支持连续输错之后直接退出,并且在每次输错时显示剩余错误次数(提示:使用字符串格式化)

    # 实现用户登录系统,并且要支持连续输错之后直接退出,并且在每次输错时显示剩余错误次数(提示:使用字符串格式化)print('用户登录系统')n = 3 # 计数次数while True:user = input('请输入用户名:')pwd = input('请输入密码:')data = user == 'liuxiaowei' and pwd == '123'if data:print(f'{user}登录成功!')breakelse:n -= 1if n > 0:print(f'还有{n}次输入机会!')else:break# 另一种方法
    """
    n = 1
    while n < 4:user = input('请输入用户名:')pwd = input('请输入密码:')if user == 'liuxiaowei' and pwd == '123':print('登录成功!')breakelse:n += 1message = f'用户名或者密码错误,剩余输入次数为{4-n}次'print(message)"""
    
  5. 猜年龄游戏

    要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。

    # 要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。
    print('猜年龄游戏开始')
    print('最多运行尝试3次!!!')age = 88
    n = 3while n > 0:num_guess = input('请输入猜测的年龄:')if int(num_guess) > age:print('大了')n -= 1elif int(num_guess) < age:print('小了')n -= 1else:print('恭喜你,猜对了!')break# 另一种方法
    """
    n = 0
    while n < 3:n += 1age_guess = input('请输入猜测的年龄:')if int(age_guess) == 88:print('恭喜你猜对了!')else:print('猜错了')"""
    
  6. 猜年龄游戏升级版

    要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜3次,以此往复,如果回答N,就退出程序,如果猜对了,直接退出。

    print('猜字游戏升级版')num = 88n = 3
    while n > 0:num_guess = input('请输入猜测数字:')if int(num_guess) > 88:print('大了')n -= 1elif int(num_guess) < 88:print('小了')n -= 1else:print('恭喜你,猜对了!')breakif n == 0:answer = input('是否继续猜数游戏?(y/n)')if answer.lower() == 'y':n = 3else:break
    

Python学习笔记---day03 Python基础相关推荐

  1. Python 学习笔记 D1(基础)

    Python 学习笔记 D1(基础) 1.注释 #一个注释 ''' 多行注释 ''' 2.运算符与C++相同:+,-,*,/,%,>,<,=,>=,<=,==,!= 与C++不 ...

  2. Python学习笔记 1.0 基础内容篇章

    Python学习笔记 1.0 基础内容篇章 注释 变量 一.定义变量 二.使用变量 bug和debug bug: Debug工具: 数据类型 认识数据类型 在定义数据类型时发生的错误: 数据类型的补表 ...

  3. Python学习笔记之入门基础

    课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...

  4. python基础论文_北大博士Python学习笔记,Python基础语法总结,一篇文章带你入门...

    image.png 网上现在Python学习资料有很多,但是很杂.很多初学Python的朋友就不知道该怎么去抉择,那些是自己当下所需要的. 刚好朋友是北大的博士,在IT行业也工作八年了.就把他学习Py ...

  5. Python学习笔记(一) Python基础

    文章目录 1. 初始Python 1.1 Python安装 1.2 Python解释器 1.3 安装和配置PyCharm工具 2. 基础语法 2.1 注释 2.2 字面量 2.3 变量 2.4 标识符 ...

  6. 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI

    Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...

  7. 『Python学习笔记』Python实现并发编程(补充joblibpymysql)

    Python实现并发编程(补充joblib&pymysql) 文章目录 一. 并发编程知识点 1.1. 为什么引入并发编程 1.2. 如何选择多线程多进程多协程 1.2.1. 什么是CPU密集 ...

  8. 2022年最高效,踏实的Python学习笔记以及Python学习规划

    一.学习建议 1.找到自己感兴趣的方向,并且结合市场需求进行选择 Python的应用范围 测试 运维 web 人工智能 大数据 爬虫及数据分析 办公自动化 2.学习过程中一定要勤加练习,并且尝试去使用 ...

  9. python学习笔记:python类和对象,文件操作,网络编程

    目录 一.python面向对象 1.类和对象的定义 2.单继承 3.多继承 4.成员属性 5.异常 6.@property 二.python文件操作 文件的打开和读写 文件对象接口汇总 三.pytho ...

  10. Python学习笔记(13)-Python类与对象示例

    点此查看 零基础Python全栈文章目录及源码下载 本文目录 1. 简介 2. Python类的定义 3. Python类的动态语言特性 4. Python类中属性的访问控制 1. 简介 Python ...

最新文章

  1. python爬虫实战,requests模块,Python实现抓取头条街拍美图
  2. PHPcms v9 get标签sql 语句limit无效问题的解决方法
  3. 中小学计算机教室设备维修记录,多媒体电教室的管理与设备的维护
  4. 7月30日 举办专注于微服务的.NET Conf Focus
  5. 99乘法表的四种位置类型for...in while
  6. 关于AdvancedDataGrid的header的数据传递
  7. Mysql学习总结(36)——Mysql查询优化
  8. SAP License:MES与ERP系统如何分工合作
  9. 大家推荐一下开源的博客和论坛整合在一起的.net系统
  10. html5游戏怎么做apk,如何把h5app打包成移动apk
  11. win7迁移系统0x0000007B蓝屏添加NVMe驱动解决
  12. JSLint中常见报错提示
  13. 在K8s上轻松部署Tungsten Fabric的两种方式
  14. 用jQuery实现旋转木马效果(带前后按钮和索引按钮)
  15. 【Shell】测试脚本
  16. 思岚发布新品TOF激光雷达——RPLIDAR S1 性能更强、更稳定
  17. 工业互联 智造未来 “2018 智造中国峰会•上海松江” 在上海市松江区隆重召开
  18. 单片机之动态数码管篇
  19. 全球与中国IHE XDS.B(跨企业文档共享)市场现状及未来发展趋势
  20. flume启动失败:org.apache.flume.ChannelException: Put queue for MemoryTransaction of capacity 10000 full

热门文章

  1. 针对百度的常规网页优化策略
  2. web.xml.jsf_JSF 2.0 Ajax世界中的GMaps4JSF
  3. Python用socket、多线程实现一对一聊天室
  4. 比较结构的关联词(二)
  5. Python暂停的几种方法
  6. 宽带通云解析结合用友致远A6使用方法
  7. java钝化_javaEE之--------------session的活化与钝化
  8. kali通过msf利用永恒之蓝攻击服务器
  9. 【CPU占用高】software_reporter_tool.exe
  10. 供应链:WMS库内管理设计